JSON详解

JSON简介

json(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于ECMAScript规范的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得json成为理想的数据交换语言,易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
json与xml比较:

json和xml都拥有丰富的解析手段;
xml可读性相对json较好;
json相对xml而言,数据体积更小;
json传输速度远远快于xml;
json编解码更容易,xml需要考虑子节点和父节点。

JSON实例

xml和json都使用结构化方法来标记数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="utf-8"?>
<country>
<name>中国</name>
<province>
<name>广东</name>
<cities>
<city>广州</city>
<city>深圳</city>
</cities>
</province>
<province>
<name>湖北</name>
<cities>
<city>武汉</city>
</cities>
</province>
</country>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"name": "中国",
"province":
[
{
"name": "广东",
"cities": {
"city": ["广州", "深圳"]
}
},
{
"name": "湖北",
"cities": {
"city": ["武汉"]
}
}
]
}

可以看到,由于json所使用的字符要比xml少得多,可以大大得节约传输数据所占用得带宽。

JSON编解码

JAVA、Python和C++对于json的处理,都可以通过第三方库来完成,语言本身都不支持。

json

python自带的json库,对于简单数据类型(string、unicode、int、float、list、tuple、dict),可以直接处理。

python数据编码成json的规则如下:

json数据解码成python的规则如下:

对于中文数据,如果设定dumps(data,ensure_ascii=False)则会保留中文编码,如果设定dumps(data,ensure_ascii=True)则中文转成utf-8格式。

simplejson

simplejson为python第三方库,需要另外安装。
simplejson可以看作为json的精简一部分,没有json那么多功能。
Python自带的json,性能可以接受。simplejson如果没有C扩展加速,效率极其低下。

rapidjson

RapidJSON 是一个 C++ 的 JSON 解析器及生成器,被认为目前最快的json解析器,具体文档参考http://code.tencent.com/rapidjson.html.
有幸同RapidJSON的作者milo在一个项目组共过事,milo也对各个版本的JSON库做过评测,具体参考https://www.zhihu.com/question/23654513.

如果觉得我的文章对您有用,请随意赞赏