1、JSON类库
1.1、FastJson
1)介绍
Fastjson是一个Java语言编写的高性能功能完善的JSON库。采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库。Fastjson接口简单易用被广泛使用在缓存序列化、协议交互、Web输出、Android客户端等多种应用场景。
2)特点
快速FAST (比其它任何基于Java的解析器和生成器更快,包括jackson)
强大(支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或Enum)
零依赖(除了JDK没有依赖其它任何类库)
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>版本根据自己需要</version>
</dependency>
3)Fastjson Api
//1-把JSON文本parse为JSONObject或者JSONArray
public static final Object parse(String text);
//2-把JSON文本parse成JSONObject
public static final JSONObject parseObject(String text);
//3-把JSON文本parse为JavaBean
public static final <T> T parseObject(String text, Class<T> clazz);
//4-把JSON文本parse成JSONArray
public static final JSONArray parseArray(String text);
//5-把JSON文本parse成JavaBean集合
public static final <T> List<T> parseArray(String text, Class<T> clazz);
//6-将JavaBean序列化为JSON文本
public static final String toJSONString(Object object);
//7-将JavaBean序列化为带格式的JSON文本
public static final String toJSONString(Object object, boolean prettyFormat);
//8-将JavaBean转换为JSONObject或者JSONArray。
public static final Object toJSON(Object javaObject);
1.2、Json-lib
1)介绍
apache提供的json-lib小工具,它可以方便的使用Java语言来创建JSON字符串。也可以把JavaBean转换成JSON字符串。
2)核心Jar包:
json-lib.jar
3)依赖Jar包:
commons-lang.jar、commons-beanutils.jar、
commons-logging.jar、commons-collections.jar、ezmorph.jar
3)核心类:
JSONObject、JSONArray
4)JSONObject的父类其实就是Map;
JSONArray的父类其实就是List。
它们俩都都添加了一个toString()方法。用来转换成json字符串。
5)JSONObject实例
JSONObject map = new JSONObject();
map.put("name", "veeja");
map.put("age", 18);
map.put("sex", "male");
System.out.println(map.toString());
6)JSONArray实例
JSONArray jsonArray = new JSONArray();
Person p1 = new Person("aaa", 21, "male");
Person p2 = new Person("bbb", 18, "female");
jsonArray.add(p1);
jsonArray.add(p2);
System.out.println(jsonArray.toString());
1.3、Gson
1)介绍
Gson(又称Google Gson)是Google公司发布的一个开放源代码的Java库,主要用途为序列化Java对象为JSON字符串,或反序列化JSON字符串成Java对象。而JSON(JavaScriptObject Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,广泛应用于各种数据的交互中,尤其是服务器与客户端的交互。
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
2)特点
无需创建映射:Gson API为要序列化的大多数对象提供了默认映射。
性能:Gson相当快并且内存占用少。它适用于大型对象或系统。
干净的JSON:Gson创建了干净且紧凑的JSON结果,易于阅读。
无依赖关系:除JDK之外,Gson库不需要任何其他库。
开源:Gson库是开源的;它是免费提供的。
标准化:Gson是由Google管理的标准化库。
高效:这是对Java标准库的可靠,快速和有效的扩展。
支持泛型:为泛型提供广泛的支持。
支持复杂的内部类:它支持具有深继承层次结构的复杂对象。
1.4、Jackson
1)介绍
Jackson是一个简单的、功能强大的、基于Java的应用库。它可以很方便完成Java对象和Json对象(xml文档or其它格式)进行互转。Jackson社区相对比较活跃,更新速度也比较快。
2)特点
高性能且稳定:低内存占用,对大/小JSON串,大/小对象的解析表现均很优秀
无需自己手动创建映射:内置了绝大部分序列化时和Java类型的映射关系
干净的JSON:创建的JSON具有干净、紧凑、体积小等特点
第三方依赖:仅依赖于JDK
Spring生态加持:jackson是Spring家族的默认JSON/XML解析器
3)核心模块
Streaming流处理模块(jackson-core):定义底层处理流的API:JsonPaser和JsonGenerator等,并包含特定于json的实现。
Annotations标准注解模块(jackson-annotations):包含标准的Jackson注解
Databind数据绑定模块(jackson-databind):在streaming包上实现数据绑定(和对象序列化)支持;它依赖于上面的两个模块,也是Jackson的高层API(如ObjectMapper)所在的模块
2、JAVA JSON转换
初始化JSONString
String jsonString = "{\"name\":\"张三\",\"age\":10,\"applyDOList\":[{\"doctorCooApplyId\":112,\"encounterId\":212},{\"doctorCooApplyId\":113,\"encounterId\":213}]}";
2.1、jsonString转JSONObject
JSONObject jsonObject1 = JSONObject.parseObject(jsonString);
2.2、jsonString转Object
Object jsonObject2 = JSONObject.parse(jsonString);
2.3、JSonString转DTO
FatherDTO fatherDTO1
= JSON.toJavaObject(JSONObject.parseObject(jsonString),FatherDTO.class);
#jsonString允许为null
FatherDTO fatherDTO2 = JSONObject.parseObject(jsonString, FatherDTO.class);
FatherDTO fatherDTO3 = JSON.parseObject(jsonString,FatherDTO.class);
2.4、JSONObject转DTO
FatherDTO fatherDTO4 = JSON.toJavaObject(jsonObject1,FatherDTO.class);
FatherDTO fatherDTO5 = JSON.parseObject(String.valueOf(jsonObject1),FatherDTO.class);
2.5、JSONArray转List<DTO>
JSONArray jsonArray = jsonObject1.getJSONArray("applyDOList");
List<DoctorCooApplyDO> applyDOS
= JSON.parseArray(JSONObject.toJSONString(jsonArray), DoctorCooApplyDO.class);
2.6、jsonString转Map
Map<String,Object> map1 = (Map)JSON.parse(jsonString);
Map<String,Object> map2 = JSON.parseObject(jsonString);
Map<String,Object> map3 = JSON.parseObject(jsonString,Map.class);
Map<String,Object> map4 =(Map)JSONObject.parse(jsonString);
Map<String,Object> map5 =JSONObject.parseObject(jsonString,Map.class);
2.7、DTO转Map
Map<String,Object> map6 = BeanMapper.map(fatherDTO1,Map.class);
Gson gson = new Gson();
Map<String,Object> map7 = gson.fromJson(gson.toJson(fatherDTO1), Map.class);//有精度问题
Map<String,Object> map8 = cn.hutool.core.bean.BeanUtil.beanToMap(inBO);
2.8、Map转DTO
FatherDTO fatherDTO11 = BeanMapper.map(map6,FatherDTO.class);
FatherDTO fatherDTO12 = mapToObj(map3,FatherDTO.class);
public static <T> T mapToObj(Map source,Class<T> target) throws Exception {
Field[] fields = target.getDeclaredFields();
T o = target.newInstance();
for(Field field:fields){
Object val;
if((val=source.get(field.getName()))!=null){
field.setAccessible(true);
field.set(o,val);
}
}
return o;
}