python json常用方法总结
python版本:python3.7
JSON (JavaScript Object Notation),是一个受 JavaScript 的对象字面量语法启发的轻量级数据交换格式。
- json是一种通用的数据类型,在各种语言上都可以使用
- 常用于接口返回数据表示
- json形式类似于dict,也是以key-value形式表示
- 在python中,json其实是个字符串,字符串不能用key、value来取值,所以要先转换为字典才可以方便的取到json内的值
loads与dumps
- json.loads是将json对象解码成python对象,可以理解为json.loads将json字符串转化为字典(或者包含字典的python对象,如list)。
- json.dumps是对python对象编码成json对象,可以理解为json.dumps将字典(或者包含字典的python对象,如list)转化为json字符串。
举例:
import json
dict_demo = ['foo', {'bar': ('baz', None, 1.0, 2)}]
print("dict_demo type: ", type(dict_demo))
after_json_dumps = json.dumps(dict_demo, sort_keys=True, indent=4)
print("after_json_dumps type: ", type(after_json_dumps))
print(after_json_dumps)
after_json_load = json.loads(after_json_dumps, encoding='utf-8')
print("after_json_load type: ", type(after_json_load))
print(after_json_dumps)
输出结果如下:
dict_demo type: <class 'list'>
after_json_dumps type: <class 'str'>
[
"foo",
{
"bar": [
"baz",
null,
1.0,
2
]
}
]
after_json_load type: <class 'list'>
[
"foo",
{
"bar": [
"baz",
null,
1.0,
2
]
}
]
备注:
- sort_keys是以json字符串的key进行排序
- indent是格式化json字符串,显示的空格数,主要是为了好看美观
- encoding是loads时的编码
load与dump
json.dump()和json.load()主要用来读写json文件的函数,这个文件一般会先被open了。
import json
dict_demo = ['foo', {'bar': ('baz', None, 1.0, 2)}]
after_json_dumps = json.dumps(dict_demo)
after_json_load = json.loads(after_json_dumps, encoding='utf-8')
file_write = open("json_demo.txt", 'w', encoding="utf-8")
# 将json字符串写入文件
json.dump(after_json_load, file_write)
file_write.close()
file_read = open("json_demo.txt", 'r', encoding="utf-8")
# 将打开的文件格式读取为json字符串
json_str = json.load(file_read)
print(json_str)
file_read.close()
PS
- json.loads()无法解析包含单引号的json字符串
如下:
with open("json_demo.txt", 'r') as f:
lines = f.readlines()
for line in lines:
json_str = json.loads(line)
会报错:json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 10 (char 9)
解决办法:
将json.loads变为eavl
import json
with open("json_demo.txt", 'r') as f:
lines = f.readlines()
for line in lines:
json_str = eval(line)
print(json_str)
参考:
JSON 编码和解码器