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)相关推荐

  1. java 自定义json解析注解 复杂json解析 工具类

    java 自定义json解析注解 复杂json解析 工具类 目录 java 自定义json解析注解 复杂json解析 工具类 1.背景 2.需求-各式各样的json 一.一星难度json[json对象 ...

  2. [Android开发] Json解析工具类,一个类搞定Json的解析

    一.简介 利用递归的方式反射解析到bean里面 二.详细代码 1. Json格式 例如服务器指定规定json格式为: {"code": "--" , // 返回 ...

  3. 比较好玩的工具类合集推荐!!!

    1. 一款比较优秀的截图工具 https://www.snipaste.com/ 2. 一款GIF动画录制工具 https://www.cockos.com/licecap/ 3. 一款打包安装工具, ...

  4. unity3d Json解析工具类

    使用到的是Newtonsoft.Json动态库,下载地址: http://www.newtonsoft.com/json using Newtonsoft.Json; using System.Col ...

  5. Java:JSON解析工具-org.json

    一.简介 org.json是Java常用的Json解析工具,主要提供JSONObject和JSONArray类,现在就各个类的使用解释如下. 二.准备 1.在使用org.json之前,我们应该先从该网 ...

  6. Json解析工具Jackson(使用注解)

    接上一篇文章Json解析工具Jackson(简单应用),jackson在实际应用中给我们提供了一系列注解,提高了开发的灵活性,下面介绍一下最常用的一些注解 @JsonIgnoreProperties ...

  7. JSON解析工具比较,主要GSON和FastJSON

    转自:http://www.cnblogs.com/kunpengit/p/4001680.html 一 .各个JSON技术的简介和优劣 1.json-lib json-lib最开始的也是应用最广泛的 ...

  8. java处理json的工具类(list,map和json的之间的转换)

    需要下载第三方的jar :net.sf.json import java.io.BufferedReader; import java.io.InputStream; import java.io.I ...

  9. 自定义Json解析工具

    此博客为博主原创文章,转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10689536.html fastjson是很好用的json解析工具,只可惜项目中要 ...

最新文章

  1. [HNOI2012]排队
  2. Oracle数据库中表格的级联删除问题
  3. dj鲜生-通过邮箱发送加密的激活链接
  4. 深度学习经典算法 | 蚁群算法解析
  5. 无心剑中译谢赫·汉尼弗《吻封深情》
  6. hub设备_ORICO|DIY玩家需要一款高性能的HUB,犹如王者需要一把利器一样
  7. 浏览器渲染页面的原理及流程---------重绘与重排(回流)--优化
  8. 香农编码的gui编码_编码香农编码
  9. 如何自学CAD制图?学会这5个方法,只需一周就能从小白变大神
  10. continuity不收敛的问题
  11. 离散数学常用符号TeX输入
  12. 消息中间件 - ActiveMQ高级特性和用法-Mirrored Queue 镜像队列(了解即可)(十)
  13. 射频信号源及射频信号测试接口案例-纳米软件
  14. cs224n学习笔记 03:Subword Models(fasttext附代码)
  15. 15个SEO学习的国外SEO博客
  16. 矿大计算机学院国奖公示,中国矿大学子在2020年中国大学生计算机设计大赛省级赛中荣获特等奖...
  17. matlab是什么意思,x'在matlab是什么意思
  18. 应用comsol分析多分支缝压裂应力分布
  19. 集美大学c语言大作业,集美大学c语言练习题
  20. 和优秀的人在一起,会激励自己变得优秀。

热门文章

  1. mysql语言的创建模式文件_南开17春学期《数据库应用系统设计》在线作业 免费答案...
  2. mysql pkg_Solaris10下mysql的pkg安装方法
  3. 数组元素替换_Linux Shell 通俗简要的讲解数组操作
  4. 信息学奥赛一本通(1024:保留3位小数的浮点数)
  5. Problem C(HDU-5687)
  6. Transform(HDU-5637)
  7. 打击犯罪(信息学奥赛一本通-T1386)
  8. 连连看(HDU-1175)
  9. 6 MM配置-企业结构-分配-给公司代码分配采购组织
  10. 56 FI配置-财务会计-固定资产-资产数据传输-定义历史数据传输的抵销科目