12.9 json:JavaScript对象记法
json模块中提供了一个与pickle类似的API,可以将内存中Python对象转换为一个串行化表示,被称为JavaScript对象记法(JavaScript Object Notation,JSON)。不同于pickle,JSON有一个优点,它有多种语言的实现(特别是JavaScript)。JSON对于REST API中Web服务器和客户之间的通信使用最广泛,不过也可以用于满足其他应用间的通信需求。
12.9.1 编码和解码简单数据类型
默认地,编码器理解Python的一些内置类型(即str,int,float,list,tuple和dict)。
import json
data = [{'a':'A','b':(2,4),'c':3.0}]
print('DATA:',repr(data))
data_string = json.dumps(data)
print('JSON:',data_string)
对值编码时,表面上类似于Python的repr()输出。
运行结果:
编码然后再重新解码时,可能不会得到完全相同的对象类型。
import json
data = [{'a':'A','b':(2,4),'c':3.0}]
print('DATA :',data)
data_string = json.dumps(data)
print('ENCODED:',data_string)
decoded = json.loads(data_string)
print('DECODED:',decoded)
print('ORIGINAL:',type(data[0]['b']))
print('DECODED :',type(decoded[0]['b']))
具体地,元组会变成列表。
运行结果: