前言
目前的主要使用的库有三个:Jackson、Gson、Fastjson
作为 Spring MVC / SpringBoot 技术栈 开发的话,用默认的Jackson
是最好的!
Jackson
SpringBoot2 中的 web starter 中就内置了 jackson 三个jar依赖
目前最新版为 2.12.3 其中三个jar 各自大小为
- jackson-core 314Kb
- jackson-databind 1.3Mb
- jackson-annotations 65Kb
使用方式
Maven引入包:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.12.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.12.3</version> </dependency> <!-- 注意:如没有用到注解去配置,可不用引入此依赖 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.12.3</version> </dependency>
Java代码:
//直接读取简单JSON List list = mapper.readValue(result, List.class) //List转JSON ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeAsString(Arrays.asList(1, 2, 3))
Gson
目前最新版为 2.8.6 其jar大小为 235kb
使用方式
Maven引入包:
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.6</version> </dependency>
Java代码:
// 例如转化一个类型不固定的List, 自定义类型同理 Gson gson = new Gson(); List origin = new ArrayList(); origin.add(12); origin.add("dfsf"); System.out.println(gson.toJson(origin)); // 结果为: [12,"dfsf"] // 读取这个JSON数组 Gson gson = new Gson(); List result = gson.fromJson("[12,\"dfsf\"]", List.class); for (Object o : result) { System.out.print(o.toString() + " "); } // 结果为: 12.0 dfsf
fastjson
目前最新版本为 1.2.76 jar包大小为 533kb
使用方式
Maven引入包:
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.76</version> </dependency>
性能测试对比
硬件配置
内存 8G 2400MHZ
CPU 8核 i7-7700
测试生成JSON
2000000 个 Person 对象,启动测试,直接吃掉 1.7G 内存
测试结果如下:
第一次 >>>>>> GSON 耗时:<2581ms> 格式:<0h:0m:2s:581ms> <<<<<< >>>>>> Jackson 耗时:<1292ms> 格式:<0h:0m:1s:292ms> <<<<<< >>>>>> FastJson 耗时:<7237ms> 格式:<0h:0m:7s:237ms> <<<<<< 第二次 >>>>>> GSON 耗时:<2498ms> 格式:<0h:0m:2s:498ms> <<<<<< >>>>>> Jackson 耗时:<1316ms> 格式:<0h:0m:1s:316ms> <<<<<< >>>>>> FastJson 耗时:<7548ms> 格式:<0h:0m:7s:548ms> <<<<<< 第三次 >>>>>> GSON 耗时:<2465ms> 格式:<0h:0m:2s:465ms> <<<<<< >>>>>> Jackson 耗时:<1483ms> 格式:<0h:0m:1s:483ms> <<<<<< >>>>>> FastJson 耗时:<7432ms> 格式:<0h:0m:7s:432ms> <<<<<<
2000 个对象
>>>>>> GSON 耗时:<51ms> 格式:<0h:0m:0s:51ms> <<<<<< >>>>>> Jackson 耗时:<176ms> 格式:<0h:0m:0s:176ms> <<<<<< >>>>>> FastJson 耗时:<126ms> 格式:<0h:0m:0s:126ms> <<<<<< >>>>>> GSON 耗时:<53ms> 格式:<0h:0m:0s:53ms> <<<<<< >>>>>> Jackson 耗时:<170ms> 格式:<0h:0m:0s:170ms> <<<<<< >>>>>> FastJson 耗时:<166ms> 格式:<0h:0m:0s:166ms> <<<<<< >>>>>> GSON 耗时:<57ms> 格式:<0h:0m:0s:57ms> <<<<<< >>>>>> Jackson 耗时:<178ms> 格式:<0h:0m:0s:178ms> <<<<<< >>>>>> FastJson 耗时:<129ms> 格式:<0h:0m:0s:129ms> <<<<<< >>>>>> GSON 耗时:<49ms> 格式:<0h:0m:0s:49ms> <<<<<< >>>>>> Jackson 耗时:<160ms> 格式:<0h:0m:0s:160ms> <<<<<< >>>>>> FastJson 耗时:<126ms> 格式:<0h:0m:0s:126ms> <<<<<<
测试读取JSON
知乎: Fastjson这么快老外为啥还是热衷 Jackson?
Jackson:强项是灵活可定制,并且具有了一个生态,yaml 也能完美驾驭
Gson:轻量 简洁
Fastjson:似乎没有一个好的生态 , 性能也比较好