一文吃透Json解析工具类合集(FastJson、Jackson、Gson)
Json解析工具类
- 前言
- 一、各个JSON技术的简介
- 1.1 FastJson角色
- 1.2 Jackson角色
- 1.3 Gson角色
- 二、使用步骤
- 2.1 引入库
- 1、FastJson依赖
- 2、Jackson依赖
- 3、Gson依赖
- 2.2 将JSON 字符串转换为Java 对象
- 1、FastJson版本
- 2、Jackson版本
- 3、Gson版本
- 2.3 将Java对象转换为JSON 字符串
- 1、FastJson版本
- 2、Jackson版本
- 3、Gson版本
- 2.4 将JSON 字符串数组转为JSON数组
- 1、FastJson版本
- 2、Jackson版本
- 3、Gson版本
- 2.5 将JSON数组转为JSON 字符串
- 1、FastJson版本
- 2、Jackson版本
- 3、Gson版本
- 总结
前言
在工作中,少不了Json解析处理,一般我们常用的就是FastJson、Jackson、Gson这三大工具类,他们都有各自的优缺点,本篇文章我们来使用一下他们各自的API,对比一下。
一、各个JSON技术的简介
1.1 FastJson角色
fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
Github官网简介:https://github.com/alibaba/fastjson/wiki/Quick-Start-CN
1.2 Jackson角色
Jackson被称为“ Java JSON库”或“ Java的最佳JSON解析器”。或简称为“ JSON for Java”。
Github官网简介:https://github.com/FasterXML/jackson
1.3 Gson角色
Gson是一个Java库,可用于将Java对象转换为其JSON表示形式。它也可以用于将JSON字符串转换为等效的Java对象。Gson可以处理任意Java对象,包括您没有源代码的预先存在的对象。
Github官网简介:https://github.com/google/gson
二、使用步骤
2.1 引入库
1、FastJson依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.75</version>
</dependency>
Maven中央仓库:https://mvnrepository.com/artifact/com.alibaba/fastjson/1.2.75
2、Jackson依赖
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.12.1</version>
</dependency>
Maven中央仓库:https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations/2.12.1
3、Gson依赖
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.6</version>
</dependency>
Maven中央仓库:https://mvnrepository.com/artifact/com.google.code.gson/gson/2.8.6
2.2 将JSON 字符串转换为Java 对象
Person对象
/*** @author DT开发者*/
@Data
@EqualsAndHashCode(callSuper = false)
@AllArgsConstructor
@NoArgsConstructor
public class Person implements Serializable {private Integer id;private String name;private Date createTime;
}
1、FastJson版本
public static void main(String[] args) {String json = "{\"createTime\":1621341922450,\"id\":1,\"name\":\"DT\"}";// 方式1: 将json字符串转为Java对象Person person = JSON.parseObject(json,Person.class);System.out.println("java对象->>>"+person);System.out.println("=========================================================");// 方式2: 将json字符串转为Java对象Person newPerson2 = JSONObject.parseObject(json, Person.class);System.out.println("java对象->>>"+newPerson2);
}
JSON.parseObject(String,Object.class)
JSONObject.parseObject(String, Object.class)
2、Jackson版本
public static void main(String[] args) {// 创建Jackson核心对象 ObjectMapperObjectMapper objectMapper = new ObjectMapper();String json = "{\"createTime\":1621341922450,\"id\":1,\"name\":\"DT\"}";try {Person person = objectMapper.readValue(json, Person.class);System.out.println("java对象->>>"+person);} catch (JsonProcessingException e) {e.printStackTrace();}
}
3、Gson版本
public static void main(String[] args) {// gson无法正常将时间戳转化成date// 使用JSON内存树注册Date类型final Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {@Overridepublic Date deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext context) throws JsonParseException {return new Date(jsonElement.getAsJsonPrimitive().getAsLong());}}).create();String json = "{\"createTime\":1621341922450,\"id\":1,\"name\":\"DT\"}";Person person = gson.fromJson(json, Person.class);System.out.println("java对象->>>"+person);}
2.3 将Java对象转换为JSON 字符串
1、FastJson版本
public static void main(String[] args) {Person person = new Person(1,"DT",new Date());// 方式1:将对象转为json字符串String json = JSON.toJSONString(person);System.out.println("json字符串->>>"+json);System.out.println("=========================================================");// 方式2:将对象转为json字符串String json2 = JSONObject.toJSONString(person);System.out.println("json字符串->>>"+json2);}
JSONObject.toJSONString(String)
JSON.toJSONString(String)
2、Jackson版本
public static void main(String[] args) {// 创建Jackson核心对象 ObjectMapperObjectMapper objectMapper = new ObjectMapper();Person person = new Person(1,"DT",new Date());try {String json = objectMapper.writeValueAsString(person);System.out.println("json字符串->>>"+json);} catch (JsonProcessingException e) {e.printStackTrace();}}
3、Gson版本
public static void main(String[] args) {Gson gson = new Gson();Person person = new Person(1,"DT",new Date());String json = gson.toJson(person);System.out.println("json字符串->>>"+json);
}
2.4 将JSON 字符串数组转为JSON数组
1、FastJson版本
public static void main(String[] args) {List<Person> personList = new ArrayList<>();personList.add(new Person(1,"DT",new Date()));personList.add(new Person(2,"DT1",new Date()));personList.add(new Person(3,"DT2",new Date()));String json = JSONObject.toJSONString(personList);JSONArray jsArr = JSONObject.parseArray(json);System.out.println(jsArr);
}
JSONObject.parseArray(json)
遍历循环Json数组:
public static void main(String[] args) {List<Person> personList = new ArrayList<>();personList.add(new Person(1,"DT",new Date()));personList.add(new Person(2,"DT1",new Date()));personList.add(new Person(3,"DT2",new Date()));String json = JSONObject.toJSONString(personList);JSONArray jsArr = JSONObject.parseArray(json);// 遍历方式1jsArr.stream().forEach(json1 ->{System.out.println(json1.toString());});// 遍历方式2for (Object o : jsArr) {JSONObject obj = (JSONObject) o;System.out.println("取到id->>>" + obj.get("id"));// 判断是否存在keySystem.out.println("key是否存在->>>"+obj.containsKey("name1"));// 判断是否存在值System.out.println("value是否存在->>>"+obj.containsValue(obj.get("id")));}
}
2、Jackson版本
public static void main(String[] args) throws JsonProcessingException {// 将JSON数组转换为array对象ObjectMapper mapper = new ObjectMapper();String json = "[{\"id\":1,\"name\":\"张三\",\"createTime\":1622719597081}, {\"id\":2,\"name\":\"李四\",\"createTime\":1622719597081}]";// 方式1Person[] pp1 = mapper.readValue(json, Person[].class);for (Person person : pp1) {System.out.println(person);}// 方式2List<Person> ppl2 = Arrays.asList(mapper.readValue(json, Person[].class));ppl2.stream().forEach(System.out::println);// 方式3List<Person> pp3 = mapper.readValue(json, new TypeReference<List<Person>>() {});pp3.stream().forEach(System.out::println);
}
3、Gson版本
```java
public static void main(String[] args) {// gson无法正常将时间戳转化成date// 使用JSON内存树注册Date类型final Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {@Overridepublic Date deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext context) throws JsonParseException {return new Date(jsonElement.getAsJsonPrimitive().getAsLong());}}).create();String json = "[{\"id\":1,\"name\":\"张三\",\"createTime\":1622719597081}, {\"id\":2,\"name\":\"李四\",\"createTime\":1622719597081}]";Type type = new TypeToken<ArrayList<Person>>(){}.getType();List<Person> personList = gson.fromJson(json, type);personList.stream().forEach(System.out::println);
}
List反序列化时必须提供它的Type,通过Gson提供的TypeToken.getType()方法可以定义当前List的Type。
2.5 将JSON数组转为JSON 字符串
1、FastJson版本
public static void main(String[] args) {List<Person> personList = new ArrayList<>();personList.add(new Person(1,"DT",new Date()));personList.add(new Person(2,"DT1",new Date()));personList.add(new Person(3,"DT2",new Date()));String json = JSONObject.toJSONString(personList);System.out.println("json->>>"+json);
}
2、Jackson版本
public static void main(String[] args) throws JsonProcessingException {ObjectMapper objectMapper = new ObjectMapper();List<Person> personList = new ArrayList<>();personList.add(new Person(1,"DT",new Date()));personList.add(new Person(2,"DT1",new Date()));personList.add(new Person(3,"DT2",new Date()));String json = objectMapper.writeValueAsString(personList);System.out.println("json->>>"+json);
}
3、Gson版本
public static void main(String[] args) {Gson gson = new Gson();List<Person> personList = new ArrayList<>();personList.add(new Person(1,"DT",new Date()));personList.add(new Person(2,"DT1",new Date()));personList.add(new Person(3,"DT2",new Date()));String json = gson.toJson(personList);System.out.println("json->>>"+json);
}
总结
以上就是今天的内容,能坚持看到这里,你一定会有收获,我个人比较喜欢使用FastJson,推挤教程文档:https://www.runoob.com/w3cnote/fastjson-intro.html
技术群:176251012 喜欢是一种态度,坚持才是态度的体现。
一文吃透Json解析工具类合集(FastJson、Jackson、Gson)相关推荐
- java 自定义json解析注解 复杂json解析 工具类
java 自定义json解析注解 复杂json解析 工具类 目录 java 自定义json解析注解 复杂json解析 工具类 1.背景 2.需求-各式各样的json 一.一星难度json[json对象 ...
- [Android开发] Json解析工具类,一个类搞定Json的解析
一.简介 利用递归的方式反射解析到bean里面 二.详细代码 1. Json格式 例如服务器指定规定json格式为: {"code": "--" , // 返回 ...
- 比较好玩的工具类合集推荐!!!
1. 一款比较优秀的截图工具 https://www.snipaste.com/ 2. 一款GIF动画录制工具 https://www.cockos.com/licecap/ 3. 一款打包安装工具, ...
- unity3d Json解析工具类
使用到的是Newtonsoft.Json动态库,下载地址: http://www.newtonsoft.com/json using Newtonsoft.Json; using System.Col ...
- Java:JSON解析工具-org.json
一.简介 org.json是Java常用的Json解析工具,主要提供JSONObject和JSONArray类,现在就各个类的使用解释如下. 二.准备 1.在使用org.json之前,我们应该先从该网 ...
- Json解析工具Jackson(使用注解)
接上一篇文章Json解析工具Jackson(简单应用),jackson在实际应用中给我们提供了一系列注解,提高了开发的灵活性,下面介绍一下最常用的一些注解 @JsonIgnoreProperties ...
- JSON解析工具比较,主要GSON和FastJSON
转自:http://www.cnblogs.com/kunpengit/p/4001680.html 一 .各个JSON技术的简介和优劣 1.json-lib json-lib最开始的也是应用最广泛的 ...
- java处理json的工具类(list,map和json的之间的转换)
需要下载第三方的jar :net.sf.json import java.io.BufferedReader; import java.io.InputStream; import java.io.I ...
- 自定义Json解析工具
此博客为博主原创文章,转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10689536.html fastjson是很好用的json解析工具,只可惜项目中要 ...
最新文章
- [HNOI2012]排队
- Oracle数据库中表格的级联删除问题
- dj鲜生-通过邮箱发送加密的激活链接
- 深度学习经典算法 | 蚁群算法解析
- 无心剑中译谢赫·汉尼弗《吻封深情》
- hub设备_ORICO|DIY玩家需要一款高性能的HUB,犹如王者需要一把利器一样
- 浏览器渲染页面的原理及流程---------重绘与重排(回流)--优化
- 香农编码的gui编码_编码香农编码
- 如何自学CAD制图?学会这5个方法,只需一周就能从小白变大神
- continuity不收敛的问题
- 离散数学常用符号TeX输入
- 消息中间件 - ActiveMQ高级特性和用法-Mirrored Queue 镜像队列(了解即可)(十)
- 射频信号源及射频信号测试接口案例-纳米软件
- cs224n学习笔记 03:Subword Models(fasttext附代码)
- 15个SEO学习的国外SEO博客
- 矿大计算机学院国奖公示,中国矿大学子在2020年中国大学生计算机设计大赛省级赛中荣获特等奖...
- matlab是什么意思,x'在matlab是什么意思
- 应用comsol分析多分支缝压裂应力分布
- 集美大学c语言大作业,集美大学c语言练习题
- 和优秀的人在一起,会激励自己变得优秀。
热门文章
- mysql语言的创建模式文件_南开17春学期《数据库应用系统设计》在线作业 免费答案...
- mysql pkg_Solaris10下mysql的pkg安装方法
- 数组元素替换_Linux Shell 通俗简要的讲解数组操作
- 信息学奥赛一本通(1024:保留3位小数的浮点数)
- Problem C(HDU-5687)
- Transform(HDU-5637)
- 打击犯罪(信息学奥赛一本通-T1386)
- 连连看(HDU-1175)
- 6 MM配置-企业结构-分配-给公司代码分配采购组织
- 56 FI配置-财务会计-固定资产-资产数据传输-定义历史数据传输的抵销科目