前段时间,有个小哥问我JSON转换的问题?
他说,我们平时使用最多的JSON转换工具是什么,其实现在JSON转换的框架比较多,例如:
Jackson,Gson,Fastjson都可以实现,Gson主要在安卓开发中用的较多1、JSON介绍
JSON(Javascript Object Notation)全称Js对象符号,是一种轻量级的数据交换格式,它基于 ECMAScript 标准规范。采用完全独立于编程语言的文本格式来存储和表示数据,简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。
2、JSON的使用场景
JSON用的最多的地方莫过于Web以及移动APP的应用,也就是说不管是用手机还是电脑访问互联网,都会涉及到JSON的数据传输
3、JSON长啥样
json有两种数据格式
1、数组方式
[{"id" : 1 ,"name" : "xiaoming"},{"id" : 2 , "name" : "xiaohong"}]
2、对象方式
{"username":"zhangsan","age":28,"password":"123","addr":"北京"}
4、Java对象到Json的转换
1、定义Java对象
@Data@NoArgsConstructorpublic class Person{ private String name; private int age;}
2、使用gson转换json
1、添加依赖
com.google.code.gsongroupId> gsonartifactId> 2.8.6version>dependency>
2、转换,序列化与反序列化
GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.setDateFormat("yyyy-MM-dd hh:mm:ss"); //设置日期格式 Gson gson = gsonBuilder.create(); Person person = new Person("jack",new Date()); String s = gson.toJson(person); System.out.println("s = " + s); //转换json Person p1 = gson.fromJson(s,Person.class); System.out.println("p1 = " + p1); //反序列化person对象
3、使用jackson转换json
1、添加依赖
com.fasterxml.jackson.coregroupId> jackson-databindartifactId> 2.7.4version>dependency>
2、转换,序列化与反序列化
ObjectMapper objectMapper = new ObjectMapper();objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"));Person person = new Person("jack",new Date());String string = objectMapper.writeValueAsString(person); //序列化jsonSystem.out.println("string = " + string);Person p1 = objectMapper.readValue(string, Person.class);//反序列化person对象System.out.println("p1 = " + p1);
4、使用fastJson转换json
1、添加依赖
com.alibabagroupId> fastjsonartifactId> 1.1.23version> dependency>
2、转换,序列化与反序列化
Person person = newPerson("jack",new Date());String string = JSON.toJSONString(person, SerializerFeature.DisableCircularReferenceDetect, SerializerFeature.WriteDateUseDateFormat);System.out.println("string = " + string);//序列化JSONPerson p1 = JSON.parseObject(string,Person.class);//反序列化Person对象System.out.println("p1 = " + p1);
5、总结
代码书写方面,fastjson最简洁,jackson与gson次之
性能方面:把Java对象JSON序列化,
Jackson速度最快,在测试中比Gson快接近50%,FastJSON和Gson速度接近。
把JSON反序列化成Java对象,
FastJSON、Jackson速度接近,Gson速度稍慢,不过差距很小
附、使用rain-tool工具库的core组件转换json
1、简介
rain-tool是本人结合这几年的工作经历,封装的一套关于Java产品开发各个方面的工具库,其中就包含了json的转换
详情请访问:https://gitee.com/windsound/rain.git
2、使用
1、引入依赖
com.gitee.windsoundgroupId> rain-mybatis-toolartifactId> 1.0.0version>dependency>
2、转换,序列化与反序列化
Person person = new Person("jack",new Date());String s = JSONUtil.toJson(person); //序列化jsonSystem.out.println("s = " + s);Person parse = JSONUtil.parse(s, Person.class); //反序列化person对象System.out.println("parse = " + parse);
3、结语
大家会发现,使用rain-tool转换json,代码更简洁,
同时,内部依赖采用了Jackson,从而也保证了性能