3.7. JSON

JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

3.7.1. JSON语法

  • 对象表示为键值对

  • 数据由逗号分隔

  • 花括号保存对象

  • 方括号保存数组

怎么表示对象 对象以一对花括号包含,里面包含键值对,如 {"a":1, "b": "1"} ,这样子,键值必须以双引号括起来,数据之前以逗号分隔

怎么表示数组 数组以一对方括号包含,如 [1, 2, "2, {"a": 1}] 这样子

JSON对象和JSON字符串 JSON对象比较像python里的字典,但还是有区别的,JSON对象里的字符串只能用双引号,python可以用单引号,JSON对象里只能包括基础数据类型,即数字(包含小数)、字符串、数组、字典、空值,但python字典可以包含其它对象,下面定义一个JSON对象:

{
    "key1": 1,
    "key2": "1",
    "key3": [1, "1"],
    "key4": {
        "key5": 1
    }
}

JSON字符串是将JSON序列化后的字符串,将上面的JSON对象序列化后为:

'{"key3": [1, "1"], "key2": "1", "key1": 1, "key4": {"key5": 1}}'

3.7.2. 在python中使用json

python标准库中自带json模块,可以序列化和反序列化json,在python中json对象就是字典,但python字典不一定是json对象

序列化JSON:

# coding=utf-8

import json

raw_json = {
    "key1": 1,
    "key2": "1",
    "key3": [1, "1"],
    "key4": {
        "key5": 1
    }
    }

json_str = json.dumps(raw_json)
print(repr(json_str))

输入为:

'{"key3": [1, "1"], "key2": "1", "key1": 1, "key4": {"key5": 1}}'
[Finished in 0.2s]

反序列化JSON:

# coding=utf-8

import json

raw_json = {
    "key1": 1,
    "key2": "1",
    "key3": [1, "1"],
    "key4": {
        "key5": 1
    }
    }

json_str = '{"key3": [1, "1"], "key2": "1", "key1": 1, "key4": {"key5": 1}}'
raw_json = json.loads(json_str)
print(repr(raw_json))

输出结果为:

{u'key3': [1, u'1'], u'key2': u'1', u'key1': 1, u'key4': {u'key5': 1}}
[Finished in 0.2s]