有3种常用的反序列化库,gson和fastjson都很棒,json-lib有很大的局限性不推荐使用!

1. net.sf.json(json-lib)

只能用于解析简单的JSON,稍微复杂点的例如,类里面有含有List属性,这个没有问题(在0.9这个版本不行,但2.3可以,应该是bug修复了),但是List属性中类中再含有List就不支持了,言外之意,类中含有List只能一层,再深就会报如下错误:

net.sf.json.JSONException: java.lang.NoSuchMethodException: Unknown property

代码如下:

Object object = restTemplate.getForObject(interfaceUrl, Object.class);
net.sf.json.JSONObject json = net.sf.json.JSONObject.fromObject(object);
Map<String, Class> classMap = new HashMap<String, Class>();
classMap.put("productInfoList", ProductInfoList.class);
CobraProductInfoListDto j = (CobraProductInfoListDto) net.sf.json.JSONObject.toBean(json,
CobraProductInfoListDto.class, classMap);

2.gson

String interfaceUrl = globalSettingsMapper.getValueByKey(Constant.Product.interfaceUrl);
RestTemplate restTemplate = new RestTemplate();
Object object = restTemplate.getForObject(interfaceUrl, Object.class);
Gson gs= new Gson();
String json = gs.toJson(object);
CobraProductInfoListDto j = gs.fromJson(json, CobraProductInfoListDto.class);
System.out.println(j.getProductInfoList().get(0).getPLogo().getLogoName());

3.fastjson

String interfaceUrl = globalSettingsMapper.getValueByKey(Constant.Product.interfaceUrl);
RestTemplate restTemplate = new RestTemplate();
Object object = restTemplate.getForObject(interfaceUrl, Object.class);
Gson gs = new Gson();
String json = gs.toJson(object);
CobraProductInfoListDto j =JSON.parseObject(json, CobraProductInfoListDto.class);
String rateType = j.getProductInfoList().get(1).getPInterest().getCurrency();

另外推荐一个非常棒的根据Json生成Java/C#实体类的工具:http://tool.chinaz.com/tools/json2entity.aspx,很是方便!但是注意生成的代码可能需要优化,比如有些重复的类可以合为一个,数据类型上需要把DateTime改为String,因为转换时存在数据的特例,可能某些字段需要由int改为double

在反序列化时,在如何定义类文件方式上,如下2种都可以,根据实际情况选取

CobraProductInfoListDto j = JSON.parseObject(json, CobraProductInfoListDto.class);  //优势:访问方便,所有的全封装在一个类中,缺点是可能会多定义一些类

Map<String, List<ProductInfoList>> k = JSON.parseObject(json,
new TypeReference<Map<String, List<ProductInfoList>>>() {
}); //优势:和上面的方式比较起来可以少定义一些类文件

复杂JSON反序列化为类对象的更多相关文章

  1. 类对象序列化为json串,json串反序列化为类对象

    1.类对象序列化为json串: 方法一: class P(object): def __init__(self,name,age,sex): self.name=name self.age=age s ...

  2. 使用 dynamic 标记解析JSON字符串 JDynamic :支持Json反序列化为Dynamic对象

    使用 dynamic 标记解析JSON字符串  http://www.cnblogs.com/taotaodetuer/p/4171327.html 1 string jsonStr = " ...

  3. JDynamic :支持Json反序列化为Dynamic对象

    JDynamic :支持Json反序列化为Dynamic对象   2010年 .NET 4.0 发布前后,从3.5向4.0迁移,那时也有一些异构系统的需求,主要是和PHP打交道,通信使用的HTTP 格 ...

  4. C# Newtonsoft.Json反序列化为dynamic对象之后的使用

    通过Newtonsoft.Json将一个json类型的字符串反序列化为dynamic后直接使用报错 源代码: namespace ConsoleApplication1 { class Program ...

  5. JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象

    JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据.说白了就是能够直接将一个C#对象传送到前台页面成为javascript对 ...

  6. JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象 。

    JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据.说白了就是能够直接将一个C#对象传送到前台页面成为javascript对 ...

  7. 使用DataContractJsonSerializer类将类型实例序列化为JSON字符串和反序列化为实例对象 分类: JSON 前端 2014-11-10 10:20 97人阅读 评论(1) 收藏

    一.JSON简介 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是"名值对"的集合.结构由大 ...

  8. C#复杂XML反序列化为实体对象两种方式

    前言 今天主要讲的是如何把通过接口获取到的Xml数据转换成(反序列化)我们想要的实体对象,当然Xml反序列化和Json反序列化的方式基本上都是大同小异.都是我们事先定义好对应的对应的Xml实体模型,不 ...

  9. 将JSON反序列化为指定的.NET类型

    前言: 关于将JSON格式数据反序列化为指定的.NET类型数据常见的场景就是,关于网络请求获取请求成功的响应数据.本篇主要讲的的是如何通过使用Newtonsoft.Json中的JsonConvert. ...

随机推荐

  1. hightcharts在移动端运用 FastClick后苹果上legend点击失效的解决办法

    问题:在移动端做图表运用了hightcharts,引用了fastclick来消除300ms的延迟,但是发现苹果(安卓正常)上hightcharts的legend点击不起作用了,必须长按才行. 使用fa ...

  2. babel如此简单

    凡是看到这个标题点进来的同学,相信对babel都有了一定的了解.babel使用起来很简单,简单到都没有必要写一篇文章去介绍,直接看看官方文档就可以.所以我也在怀疑到底该不该写这篇文章.想来想去还是决定 ...

  3. 《JavaScript高级程序设计》 -- 基本概念(一)

    之前看过好几遍<JavaScript高级程序设计>这一书,但是始终没有完完整整的看过一遍.从现在开始我会把它完整的啃一遍,每章节都记录笔记,自己的心得,加油! 由于前三章的内容比较简单,因 ...

  4. Centos 6.5 安装python3.6

    废话不多说,直接上步骤 wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2rc1.tgz 进入 https://www.python.o ...

  5. 第一章:eclipse 中修改字体大小和编码格式

    eclipse 中修改字体大小的步骤: 1. 在 eclipse 的工具栏中,找到 weindows 下面的 preferences 2. 在 preferences 的 输出 font ,在 Bas ...

  6. CentOS7.2设置静态IP

    首先将源文件进行备份: [zgw@localhost 桌面]$ sudo cp /etc/sysconfig/network-scripts/ifcfg-eno16777736 /etc/syscon ...

  7. ConcurrentLinkedQueue 源码 since java1.5

    1 父类 java.lang.Object 继承者 java.util.AbstractCollection<E> 继承者 java.util.AbstractQueue<E> ...

  8. 【转载】 ISO14229系列之二:诊断指令格式和相关概念

    转载链接:http://www.cnblogs.com/autogeek/p/4458658.html 1. 简单的通信机制 其实诊断通信的机制很简单,可以类比client-server通信方式,即客 ...

  9. Java并发包基石-AQS详解

    目录 1 基本实现原理 1.1 如何使用 1.2 设计思想 2 自定义同步器 2.1 同步器代码实现 2.2 同步器代码测试 3 源码分析 3.1 Node结点 3.2 独占式 3.3 共享式 4 总 ...

  10. spark-2.2.0安装和部署——Spark集群学习日记

    前言 在安装后hadoop之后,接下来需要安装的就是Spark. scala-2.11.7下载与安装 具体步骤参见上一篇博文 Spark下载 为了方便,我直接是进入到了/usr/local文件夹下面进 ...