近期要做json字符串的动态序列化,所以对业内常用json序列化包做一次性能测试,再连续测试很多次后得到的结果,对于嵌套类型的反序列化性能排名如下:fastjson > jackson > gson。直接上代码如下:
pom中主要依赖测试坐标如下
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.70</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.1</version>
</dependency>
</dependencies>
入口类
package springboot.demo.json;
/**
* Hello world!
*/
public class AppMain {
static String json = "{\n" +
"\"key1\":\"val1abcsdfsdf\",\n" +
"\"key2\":\"val2abcsdfsdf\",\n" +
"\"key3\":\"val3abcsdfsdf\",\n" +
"\"key4\":\"val4abcsdfsdf\",\n" +
"\"innerKey1\":{\n" +
"\"key1\":\"val1abcsdfsdf\",\n" +
"\"key2\":\"val2abcsdfsdf\",\n" +
"\"key3\":\"val3abcsdfsdf\",\n" +
"\"key4\":\"val4abcsdfsdf\"\n" +
"},\"innerKey2\":{\n" +
"\"key1\":\"val1abcsdfsdf\",\n" +
"\"key2\":\"val2abcsdfsdf\",\n" +
"\"key3\":\"val3abcsdfsdf\",\n" +
"\"key4\":\"val4abcsdfsdf\"\n" +
"}\n" +
",\"innerKey3\":{\n" +
"\"key1\":\"val1abcsdfsdf\",\n" +
"\"key2\":\"val2abcsdfsdf\",\n" +
"\"key3\":\"val3abcsdfsdf\",\n" +
"\"key4\":\"val4abcsdfsdf\"\n" +
"}\n" +
",\"innerKey4\":{\n" +
"\"key1\":\"val1abcsdfsdf\",\n" +
"\"key2\":\"val2abcsdfsdf\",\n" +
"\"key3\":\"val3abcsdfsdf\",\n" +
"\"key4\":\"val4abcsdfsdf\"\n" +
"}\n" +
",\"innerKey5\":{\n" +
"\"key1\":\"val1abcsdfsdf\",\n" +
"\"key2\":\"val2abcsdfsdf\",\n" +
"\"key3\":\"val3abcsdfsdf\",\n" +
"\"key4\":\"val4abcsdfsdf\"\n" +
"}\n" +
"}";
public static void main(String[] args) {
int count = 1000000;
AppGson.start(json, count);
AppFastJson.start(json, count);
AppJackson.start(json,count);
}
}
gson
package springboot.demo.json;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
/**
* Hello world!
*/
public class AppGson {
static String json = "";
public static void start(String str, int count) {
json = str;
testTimeCostForGson(count);
}
public static void testTimeCostForGson(int count) {
Gson gson = new Gson();
long start = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
JsonObject jo = gson.fromJson(json,JsonObject.class);
JsonObject joKey4 = jo.getAsJsonObject("innerKey4");
}
long end = System.currentTimeMillis();
System.out.println(String.format("gson count:%s cost time:%s",count, end - start));
}
}
jackson
package springboot.demo.json;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
* Hello world!
*/
public class AppJackson {
static String json = "";
public static void start(String str, int count) {
json = str;
testTimeCostForGson(count);
}
public static void testTimeCostForGson(int count) {
long start = System.currentTimeMillis();
ObjectMapper mapper = new ObjectMapper();
for (int i = 0; i < count; i++) {
try {
JsonNode o = mapper.readValue(json, JsonNode.class);
JsonNode node = o.get("innerKey4");
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
long end = System.currentTimeMillis();
System.out.println(String.format("jackson count:%s cost time:%s", count, end - start));
}
}
fastjson
package springboot.demo.json;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
/**
* Hello world!
*/
public class AppFastJson {
static String json = "";
public static void start(String str, int count) {
json = str;
testTimeCostForFastJson(count);
}
public static void testTimeCostForFastJson(int count) {
long start = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
JSONObject jo = JSON.parseObject(json);
JSONObject key4 = jo.getJSONObject("innerKey4");
}
long end = System.currentTimeMillis();
System.out.println(String.format("fastjson count:%s cost time:%s",count, end - start));
}
}
gson count:1000000 cost time:4228
fastjson count:1000000 cost time:3181
jackson count:1000000 cost time:3308
gson count:1000000 cost time:4371
fastjson count:1000000 cost time:3375
jackson count:1000000 cost time:3566
gson count:1000000 cost time:4193
fastjson count:1000000 cost time:3236
jackson count:1000000 cost time:3542
连续测试很多次后得到的结果,对于嵌套类型的反序列化性能排名如下:fastjson > jackson > gson
1974

被折叠的 条评论
为什么被折叠?



