比较JAVA语言中Gson与FastJson两种JSON解析
一、Google的Gson
Gson是目前功能最全的Json解析神器,Gson当初是为因应Google公司内部需求而由Google自行研发而来,但自从在2008年五月公开发布第一版后已被许多公司或用户应用。Gson的应用主要为toJson与fromJson两个转换函数,无依赖,不需要例外额外的jar,能够直接跑在JDK上。
而在使用这种对象转换之前需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象。
步骤:
- 引入JAR包
- 在需要转换JSON字符串的位置编写如下代码即可:
String json = new Gson().toJSON(要转换的对象);
案例:
import com.google.gson.Gson;
public class Demo01 {
public static void main(String[] args) {
/* //1.创建Gson对象
Gson g = new Gson();
//2.转换
Book b = new Book("100","java教程","学好java的几个步骤");
String s = g.toJson(b);
System.out.println(s);*/
//1. 创建Gson对象
//2. 转换
Book b = new Book("100","java教程","学好java的几个步骤");
System.out.println(new Gson().toJson(b));
}
}
步骤:
- 引入JAR包
- 在需要转换Java对象的位置, 编写如下代码:
对象 = new Gson().fromJson(JSON字符串,对象类型.class);
案例一:
import com.google.gson.Gson;
public class Demo02 {
public static void main(String[] args) {
//创建Gson对象
Gson g = new Gson();
//2.转换 {"id":"100","name":"java教程","info":"学好java的几个步骤"}
Book b = g.fromJson("{\"id\":\"100\",\"name\":\"java教程\",\"info\":\"学好java的几个步骤\"}",Book.class);
System.out.println(b);
}
}
案例二:
import com.google.gson.Gson;
import java.util.HashMap;
import java.util.List;
public class Demo03 {
public static void main(String[] args) {
//1.创建Gson对象
Gson g = new Gson();
//2.转换 {"id":"100","name":"金苹果","info":"种植苹果真辛苦","page":["锄禾日当午","汗滴禾下土","嘿嘿嘿嘿嘿"]}
HashMap data = g.fromJson("{\"id\":\"100\",\"name\":\"金苹果\",\"info\":\"种植苹果真辛苦\",\"page\":[\"锄禾日当午\",\"汗滴禾下土\",\"嘿嘿嘿嘿嘿\"]}", HashMap.class);
List page = (List) data.get("page");
System.out.println(page.get(1));
}
}
小贴士:需要根据JSON的结构转换成对应的数据结构对象
二、阿里的FastJson
Fastjson是一个Java语言编写的高性能的JSON处理器,由阿里巴巴公司开发。
无依赖,不需要例外额外的jar,能够直接跑在JDK上。
步骤:
- 引入JAR包
- 在需要转换JSON字符串的位置编写如下代码即可:
String json=JSON.toJSONString(要转换的对象);
示例:
import com.alibaba.fastjson.JSON;
public class Demo04 {
public static void main(String[] args) {
Book book = new Book("1002","饮酒","结庐在人境,而无车马喧;问君何能尔?心远地自偏。采菊东篱下,悠然见南山;此中有真意,欲辨已忘言。");
String json = JSON.toJSONString(book);
System.out.println(json);
}
}
步骤:
- 引入JAR包
- 在需要转换Java对象的位置, 编写如下代码:
类型 对象名=JSON.parseObject(JSON字符串, 类型.class);
或
List<类型> list=JSON.parseArray(JSON字符串,类型.class);
示例一:转成Book对象
import com.alibaba.fastjson.JSON;
public class Demo05 {
public static void main(String[] args) {
Book book = JSON.parseObject("{\"id\":\"1002\",\"info\":\"结庐在人境,而无车马喧;问君何能尔?心远地自偏。采菊东篱下,悠然见南山;此中有真意,欲辨已忘言。\",\"name\":\"饮酒\"}",Book.class);
System.out.println(book);
}
}
示例二:转成字符串数组
import com.alibaba.fastjson.JSON;
import java.util.List;
public class Demo06 {
public static void main(String[] args) {
List<String> strings = JSON.parseArray(" [\"一二三\",\"二三四\",\"三四五\",\"123\"]", String.class);
System.out.println(strings.get(1));
}
}
三、比较Gson与FastJson优劣
-
使用范围
—— Gson在世界范围内使用比较广泛 ——在国内使用FastJson的比较多
-
书写格式
—— Gson需先创建好对象的类型以及其成员,更符合JAVA面向对象的特征 —— FastJson无需创建对象
-
性能比较
测试Gson的toJson()方法和FastJson的toJSONString()方法,代码如下:
import com.alibaba.fastjson.JSON;
import com.google.gson.Gson;
public class CompareGsonAndFastjson {
public static void main(String[] args) {
Gson gson = new Gson();
//创建一个Book对象
Book b = new Book("100","java教程","学好java的几个步骤");
//测试Gson的toJson()方法运行用时
long currTime = System.currentTimeMillis();
for(int i = 0; i < 1000; i++) {
gson.toJson(b);
}
System.out.println("gson:"+(System.currentTimeMillis() - currTime));
//测试fastJson的toJSONString()方法运行用时
/* long currTime = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
JSON.toJSONString(b);
}
System.out.println("fastjson:"+(System.currentTimeMillis() - currTime));*/
}
}
运行结果:
项目 | Gson | FastJson |
---|---|---|
1000 | gson:56 gson:58 gson:52 | fastjson:126 fastjson:151 fastjson:127 |
10,000 | gson:130 gson:121 gson:98 | fastjson:180 fastjson:174 fastjson:194 |
1,000,000 | gson:1372 gson:1347 gson:1258 | fastjson:570 fastjson:552 fastjson:552 |
对比结果得出结论:在执行小于1万次的条件下,Gson的性能更优;在执行100万次的时候,FastJson性能更优。(系统配置如下图)
小贴士:linux等其他系统以及不同的硬件配置下有待测试
三、如何选择
两者各有优劣,使用上具体还是需要根据团队的习惯选择;如果自己可以做选择,博主比较推荐Gson