1、Json(JavaScript Object Notation)
1.1 简要介绍:
1.2 Json语法规则
-
对象表示为键值对
-
数据由逗号分隔
-
花括号保存对象
-
方括号保存数组
{"firstName": "Json"}
1.3 Json的基本使用方法
首先导入Json所需要的jar包
下载地址:百度云下载
将所需要的jar包导入到项目中
编写Json工具类
package com.dao;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.text.SimpleDateFormat;
public class JsonUtils {
public static String toJson(Object obj){
ObjectMapper mapper = new ObjectMapper();
SimpleDateFormat sdf = new SimpleDateFormat();
mapper.setDateFormat(sdf);
String result = null;
try {
result = mapper.writeValueAsString(obj);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return result;
}
}
Student类:
package com.vo;
public class Student {
private String name;
private int age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Student() {
}
public Student(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
}
测试类:
package com.main;
import com.dao.JsonUtils;
import com.vo.Student;
public class JsonTest {
public static void main(String[] args) {
Student student = new Student("张三",19,"男");
System.out.println(JsonUtils.toJson(student));
}
}
结果:
Json有什么优点:
1、轻量级的数据交换格式
2、人们读写更加容易
3、易于机器的解析和生成
4、能够通过JavaScript中eval()函数解析JSON
5、JSON支持多语言。包括:ActionScript, C, C#, ColdFusion, E, Java, JavaScript, ML, Objective CAML, Perl, PHP, Python, Rebol, Ruby, and Lua.
2、Gson
2.1 简要介绍
GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个Json字符转成一个Java对象,或者将一个Java转化为Json字符串。
2.2 Json的基本使用方法
首先导入Gson所需要的jar包
下载地址:https://mvnrepository.com/artifact/com.google.code.gson/gson/2.8.5
如果是Maven项目 可直接在pom.xml中添加依赖
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
相对Json来说,Gson就可以不写工具类而直接实例出来了
测试类:
package com.main;
import com.google.gson.Gson;
import com.sun.xml.internal.ws.api.pipe.ServerTubeAssemblerContext;
import com.vo.Student;
public class GsonTest {
public static void main(String[] args) {
Student student = new Student("李四",20,"男");
Gson gson = new Gson();
System.out.println(gson.toJson(student));
}
}
结果:
Gson有什么优点:
3、FastJson
3.1 简要介绍
在日志解析,前后端数据传输交互中,经常会遇到字符串(String)与json
,XML
等格式相互转换与解析,其中json
以跨语言,跨前后端的优点在开发中被频繁使用,基本上可以说是标准的数据交换格式。fastjson是一个java语言编写的高性能且功能完善的JSON库,它采用一种“假定有序快速匹配”的算法,把JSON Parse
的性能提升到了极致。它的接口简单易用,已经被广泛使用在缓存序列化,协议交互,Web输出等各种应用场景中。
3.2 FastJson 基本使用方法
首先导入Gson所需要的jar包
下载地址:https://mvnrepository.com/artifact/com.alibaba/fastjson
如果是Maven项目 可直接在pom.xml中添加依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.51</version>
</dependency>
测试类:
package com.main;
import com.alibaba.fastjson.JSON;
import com.vo.Student;
public class FastJsonTest {
public static void main(String[] args) {
Student student = new Student("翠花",25,"女");
String studentJson = JSON.toJSONString(student);
System.out.println(studentJson);
}
}
结果:
FastJson 有什么优点:
1、快速FAST(比任何一款都快)
2、面向对象
3、功能强大(支持普通JDK类任意java bean Class,Collection,Map,Date或者enum)
4、零依赖(只需要有JDK即可)
5、支持注解,全类型序列化
FastJSON、Gson和Jackson性能对比
JSON序列化(Object => JSON)
测试样本数量为100000个,为了保证每个类库在测试中都能处理同一个样本,先把样本Java对象保存在文件中。每个类库测试3次,每次循环测试10遍,去掉最快速度和最慢速度,对剩下的8遍求平均值作为最终的速,取3次测试中最好的平均速度作为最终的测试数据。
类库 | 样本数量 | 执行次数 | 最长时间(毫秒) | 最短时间(毫秒) | 平均时间(毫秒) |
---|---|---|---|---|---|
FastJSON | 100000 | 10 | 2291.22 | 1416.70 | 1454.93 |
Jackson | 100000 | 10 | 1980.92 | 841.91 | 880.82 |
Gson | 100000 | 10 | 2383.02 | 1469.08 | 1520.38 |
从测试数据可知,FastJSON和GsonJSON序列化的速度差不多,Jackson是最快的(用时Gson少大约600毫秒)。
JSON反序列化(JSON => Object)
测试样本数量为100000个,为了保证每个类库在测试中都能处理同一个样本,先把样本JSON对象保存在文件中。每个类库测试3次,每次循环测试10遍,去掉最快速度和最慢速度,对剩下的8遍求平均值作为最终的速,取3次测试中最好的平均速度作为最终的测试数据。
类库 | 样本数量 | 执行次数 | 最长时间(毫秒) | 最短时间(毫秒) | 平均时间(毫秒) |
---|---|---|---|---|---|
FastJSON | 100000 | 10 | 7942.31 | 6340.55 | 6526.41 |
Jackson | 100000 | 10 | 7957.22 | 6623.85 | 6815.41 |
Gson | 100000 | 10 | 8235.15 | 7006.06 | 7364.75 |
从测试数据可知,三个类库在反序列化上性能比较接近,Gson稍微差一些。
总结
把Java对象JSON序列化,Jackson速度最快,在测试中比Gson快接近50%,FastJSON和Gson速度接近。
把JSON反序列化成Java对象,FastJSON、Jackson速度接近,Gson速度稍慢,不过差距很小。