1. JSON简介

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,基于 ECMAScript的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。适合于服务器与前台脚本语言的交互,同时也易于机器解析和生成。

2. JSON历史

在2001年,JSON被道格拉斯•克罗克福德(Douglas Crockford)创建,并在RFC4627与IETF(因特网工程任务组)标准中被规定;根据规范,JSON的IANA(互联网数字分配机构)媒体类型是application/json,文件类型是json。它基于JavaScript语言,是在JavaScript的数组(array)和对象(object)基础上发展而来。任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型。

3. JSON常用类型

3.1. 数组表示

数组使用[ ]包含所有元素,每个元素用逗号分隔, 元素可以为任意值。比如: [“abc”, 123, true, null] 访问其中的元素,使用索引号,从0 开始。

3.2. 对象表示

对象使用{ }包含一系列无序的 Key-Value 键值对表示,其中Key和Value之间用冒号分割,每个key- value之间用逗号分割。比如: {“a”:“1b”, “b”:“2c”, “3”: 2 },访问其中的元素,使用索引号,从0 开始。

4. JSON与XML对比

4.1. 可读性:

JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,比较难分出胜负。

4.2. 可扩展性

XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。

4.3. 编码难度

XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。相对来说json的书写就容易许多。

4.4. 解码难度

XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为0。

4.5. 流行度

XML已经被业界广泛的使用,但是在Ajax这个特定的领域,一定是XML让位于JSON的。

5. JSON和JS互转

使用 JSON.parse() 方法从JSON字符串转换为JS对象
     var obj = JSON.parse('{"a": "Hello", "b": "World"}'); 
结果是 
     {a: 'Hello', b: 'World'}
使用 JSON.stringify() 方法从JS对象转换为JSON字符串
   var json = JSON.stringify({a: 'Hello', b: 'World'}); 
结果是
   '{"a": "Hello", "b": "World"}'

6. JAVA的第三方JSON处理库

FastJson: 阿里巴巴开发的 JSON 库,性能十分优秀。如今国内使用得比较多。
Gson: 谷歌开发的 JSON 库,功能十分全面。
Jackson: 社区十分活跃且更新速度很快。可以轻松的将Java对象转换成json对象和xml文档

6.1. FastJson

FastJson可以通过使用maven引入alibaba的fastjson依赖,也可以引入其jar包

6.1.1. FastJson常用的转换方法
//将 JSON 对象或 JSON 数组转化为字符串
toJSONString(Object obj) 
//将字符串转换为Object
parse()
//从字符串解析 JSON 对象
parseObject()  
//从字符串解析 JSON 数组      
parseArray() 
//JSONObject反序列化             
toJavaObject(JSON json, Class<T> clazz)

6.2. GSON的引入和使用

FastJson可以通过使用maven引入gson依赖,也可以引入其jar包

6.2.1. GSON常用的转换方法
//将字符串转换为对象
fromJson(String json, Class<T> classOfT)  
//将对象转换为json字符串
toJson(Object obj)   
将整个json解析为一颗树
toJsonTree(Object src)

6.3. JackJson

JackJson可以通过maven引入jackson-core、jackson-databind和jackson-annotation依赖,也可以引入相应的jar包

6.3.1. Jackjson常用的转换方法

ObjectMapper是JSON操作的核心,Jackson的所有JSON操作都是在ObjectMapper中实现。
ObjectMapper有多个JSON序列化的方法,可以把JSON字符串保存FileOutputStream等不同的介质中。

//把arg1转成json序列,并保存到arg0文件中。
writeValue(File arg0, Object arg1)
//把arg1转成json序列,并保存到arg0输出流中。
writeValue(OutputStream arg0, Object arg1)
//把arg0转成json序列,并把结果输出成字节数组。
writeValueAsBytes(Object arg0)
//把arg0转成json序列,并把结果输出成字符串。
writeValueAsString(Object arg0)