JSON转换对象

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值