对json的处理,无非是编码和解码两部分
- 编码:将python数据结构转换为json字符串
- 解码: 将json字符串转换为python数据结构
另外,还有.json
文件的读写
一、编码
json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
默认转换规则:
Python | JSON |
---|---|
dict | object – 对象 |
list, tuple | array |
str | string |
int, float, int 和 float 派生的枚举 | 数字 |
True | true |
False | false |
None | null |
import json# 编码:将python对象,转为json对象字符串形式
a = {'fname' : 'Foo','lname' : 'Bar','email' : None,'children' : ['Moo','Koo','Roo']
}
print(a)json_str = json.dumps(a)
print(json_str)with open('data.json', 'w') as fh:fh.write(json_str)# dump 和dumps几乎一样,只不过只支持流式输出到文件或者其他stream
with open('data.json', 'w') as fh:json.dump(a, fh)
二、解码
json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
JSON | Python |
---|---|
object | dict |
array | list |
string | str |
number (int) | int |
number (real) | float |
true | True |
false | False |
null | None |
# Python 字典类型转换为 JSON 对象
data1 = {'no' : 1,'name' : 'Runoob','url' : 'http://www.runoob.com'
}json_str = json.dumps(data1)
print ("Python 原始数据:", repr(data1))
print ("JSON 对象:", json_str)# 将 JSON 对象转换为 Python 字典
data2 = json.loads(json_str)
print ("data2['name']: ", data2['name'])
print ("data2['url']: ", data2['url'])
三、 常用操作
常用操作通常就json元素的增删查改,原理就是先解码成python基本数据类型,修改好后再编码成json。
也有高效的增删查改库可以使用,比如jsonpath-ng
# json_str 增加字段age
data2["age"] = 12
json_str = json.dumps(data2) # 新json
四、 json文件读写
重要利用dump
和load
函数
py_data= {'no' : 1,'name' : 'Runoob','url' : 'http://www.runoob.com'
}# 写入
with open('data.json', 'w') as fh:json_str = json.dumps(py_data)fh.write(json_str)with open('data.json', 'w') as fh:json.dump(a, fh)# 读取
with open("./data.json", "r") as f:content = json.load(f)print(type(content)) # <class 'dict'>print(content)
参考
json模块
Python3 JSON 数据解析
jsonpath-ng