概述
Java中并没有内置的 JSON 解析,需要使用第三方类库
- fastJson :阿里巴巴的JSON 库,优势在于解析速度快,解析效率高,可以轻松处理大量的 JSON 数据
- JackSon : 社区十分活跃,
spring框架默认使用jackson
,** Jackson 则更加全面,支持多种数据格式,拥有丰富的序列化和反序列化特性,例如格式化输出、自定义序列化和反序列化等** - Gson : 谷歌开发的JSON 库
在功能特性支持、稳定性、可扩展性、易用性以及社区活跃度上 jackson 和 gson 差不多
如果对解析速度有更高要求,那么 Fastjson 可能是一个不错的选择;如果需要更全面的特性支持,那么 Jackson 可能是更好的选择。
上面的几种json库用法差不多,下面就不做具体的使用,只说明几者所使用的的pom依赖,如果想要知道具体的用法,可以单独谷歌或百度
com.alibaba.fastjson.JsonObject
依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
</dependency>
org.json.JSONObject
依赖
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20180130</version>
</dependency>
Gson
依赖
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.3.1</version>
</dependency>
JSONObject 和 JsonObject 的区别
包不同
JSONObject是属于 org.json.JSONOBject包,而 JsonObject 属于 com.google.gson.JsonObject包
保存方式不同
JSONObject用HashMap保存键值对,
JsonObject用 LInkedTreeMap 保存键值对。
对空值处理方式不同
JSONObject: 添加 value 为null,这个键值对会被删掉
JsonObject: 添加 value 为null, 可以正常添加
JSONObject会获取不到这个键值对,但是 JsonObject则会获取到 null的数据。
toString结果不同
JSONObject是用HashMap来保存数据的,所以对它toString的时候可能出现顺序和保存顺序不一致的情况
- 如果要把内容作为数据校验的话可能不行,比如用md5计算,可能会出现每次的校验值都不同