JSON(JavaScript Object Notation)是一种由道格拉斯·克罗克福特构想设计、轻量级的资料交换语言,以文字为基础,且易于让人阅读。尽管 JSON 是 Javascript 的一个子集,但 JSON 是独立于语言的文本格式,並且采用了类似于 C 语言家族的一些习惯。
【JSON 建构于两种结构】
- “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(objec t), 记录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
- 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
Python 标准库中有 json 模块,主要是执行序列化和反序列化功能:
- 序列化:encoding,把一个 Python 对象编码转化成 json 字符串
- 反序列化:decoding,把 json 格式字符串解码转换为 Python 数据对象
编码encoding: dumps()
import json print(json.__all__) # 序列化encoding:dumps(),把一个 Python 对象编码转化成 json 字符串 data = [{"name": "Tony", "lang": ("python", "english"), "age": 40}] print(data, type(data)) data_json = json.dumps(data) print(data_json, type(data_json)) # data和data_json的不同——lang的值从元组编程了列表, # 对象类型由 list -> str
将 Python 对象转化为 json 类型,是按照下表所示对照关系转化的:
Python | JSON |
dict | object |
list, tuple | array |
str, unicode | string |
int, long, float | number |
True | true |
False | false |
None | null |
解码decoding: loads()
import json print(json.__all__) # 序列化encoding:dumps(),把一个 Python 对象编码转化成 json 字符串 data = [{"name": "Tony", "lang": ("python", "english"), "age": 40}] print(data, type(data)) data_json = json.dumps(data) print(data_json, type(data_json)) # data和data_json的不同——lang的值从元组编程了列表, # 对象类型由 list -> str # 反序列化decoding:loads(),把 json 格式字符串解码转换为 Python 数据对象 new_data = json.loads(data_json) print(new_data, type(new_data)) # 解码后对象类型还原成 list;lang的值还是元组,没有还原
解码的数据类型对应关系:
JSON | Python |
object | dict |
array | list |
string | unicode |
number(int) | int, long |
number(real) | float |
true | True |
false | False |
null | None |