JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,基于ECMAScript的一个子集。Python3可以使用json模块对JSON数据进行编解码,有两个相关的函数
json.dumps():对数据进行编码
json.loads():对数据进行解码
在JSON的编解码过程中,python的原始数据类型与json类型可以相互转换,
python编码为json类型转换对应表
Python | JSON |
dict | object |
list, tuple | array |
str | string |
int, float | number |
TRUE | TRUE |
FALSE | FALSE |
None | null |
JSON | Python |
object | dict |
array | list |
string | str |
number (int) | int |
number (real) | float |
TRUE | TRUE |
FALSE | FALSE |
null | None |
python数据结构编码为JSON:
>>> import json
>>>
>>> data1 ={
... 'k1':123,
... 'k2':'abc',
... 'k3':456
... }
>>> type(data1)
<class 'dict'>
>>> json_str=json.dumps(data1)
>>> print(data1)
{'k3': 456, 'k1': 123, 'k2': 'abc'}
>>> print(json_str)
{"k3": 456, "k1": 123, "k2": "abc"}
可以看到,简单类型通过编码后跟原来很类似
解码JSON为python类型
>>> import json
>>> data1 ={
... 'k1':123,
... 'k2':'abc',
... 'k3':456
... }
>>> json_str=json.dumps(data1)
>>> data2 = json.loads(json_str)
>>> print(repr(data1))
{'k3': 456, 'k1': 123, 'k2': 'abc'}
>>> print(data2)
{'k3': 456, 'k1': 123, 'k2': 'abc'}
>>> print(data2['k3'])
456
>>> type(data2)
<class 'dict'>
如果是文件操作
# 写入 JSON 数据
with open('data.json', 'w') as f:
json.dump(data, f)
# 读取数据
with open('data.json', 'r') as f:
data = json.load(f)
或者
file = open('test.json','w',encoding='utf-8')
data1 = {'name':'john',"age":12}
data2 = {'name':'merry',"age":13}
data = [data1,data2]
print(data)
json.dump(data,file,ensure_ascii=False)
file.close()
如果从web获取,需要先转下在保存
json.dump(json.loads(result), file, ensure_ascii=False) #convert-》dict then save json file