Python中json的load、loads、dump、dumps的用法
在处理数据时经常会用到json的load和dump功能,很容易把load和loads的功能记混,学习不能一知半解,特此记录一下。用json的load/loads读取文件的好处是可以把存储的数据以原始的对象格式加载出来,比如可以加载字典(dict)、列表(list)等,而普通的读取数据可能只能把文件内容当作文本字符串读取出来。
1.json文件格式
- dict:{"姓名": "张三", "年龄": 18}
- list:["张三", "李四"]
- 字符串:"张三李四王五" (注意,必须有双引号)
- 纯数字:123
首先要明白哪些格式属于json文件,才能被json load,否则使用json load/loads会报错。不是文件名后缀为.json的才属于json文件,无论有没有后缀,或者后缀是.txt等,只要文件内容符合上面的格式,都可以使用json load/loas函数。注意,字典格式的key一定得是字符串,如果没有加引号等不符合标准字典格式则也会报错。
2.json load和loads的用法
json load/loads是将json格式的数据转成python对象,简单来说,
load是对文件进行操作的,因此load的主要参数是打开的文件,调用格式通常为 load(f)
loads是对字符串进行操作的,因此loads的主要参数是字符串,调用格式通常为 load(str)
(为了方便记忆,可以把loads后面的小尾巴s理解为str)
更全面的参数用法可以参考文末的链接,一般情况下使用基础用法已能适用大部分情况。
下面展示读取json数据时的常用写法:
下面以dict格式的数据文件text1.json为例,其他格式也一样,都可以通过以下方式读取:
text1.json的文件内容如下:

- json.load()
# coding=utf-8
import json
file = "text1.json"
with open(file, encoding="utf-8") as f: # 注意编码要和文件编码一致,不加encoding参数默认使用gbk编码读取文件
dic = json.load(f)
print(dic)
print(type(dic))
{'姓名': '张三', '年龄': 18}
<class 'dict'>
- json.loads()
with open(file, encoding="utf-8") as f:
for line in f:
dic2 = json.loads(line.strip()) # 此时的line是字符串格式
print(dic2)
print(type(dic2))
{'姓名': '张三', '年龄': 18}
<class 'dict'>json.loads的方式是先读取每行的字典格式的字符串,再解析成字典。这种方法也可以读取文件中有多行dict的形式,此时json.load就不行。
3. json dump和dumps的用法
理解了load/loads的用法,dump和dumps的用法就也很简单了,将一个python对象进行json格式的编码,和load、loads是对应的。
dump是将python对象转成json格式存入文件,主要格式是dump(obj, f)
dumps是将python对象转成json格式的字符串,主要格式是dumps(obj)
下面展示存储son数据时的常用写法:
- json.dump()
file = "save1.json"
dic = {"姓名": "张三", "年龄": 18}
with open(file, "w") as w:
json.dump(dic, w, ensure_ascii=False)可以看出json.dump是没有返回值的,直接将dic写进文件w中。
- json.dumps()
file = "save2.json"
dic = {"姓名": "张三", "年龄": 18}
with open(file, "w") as w:
w.write(json.dumps(dic, ensure_ascii=False))json.dumps是将obj转成str,因此有返回值str,再用write()函数把字符串写入文件。
注意在dump/dumps时一般都需要加ensure_ascii=False这个参数,否则存储的文件可能是乱码,如下:

ensure_ascii: 默认值为True,能将所有传入的非ASCII字符转义输出。如果ensure_ascii为False,则这些字符将按原样输出。
【参考链接】
Python 基础 之 json load 、dump、loads 和 dumps 的简单说明和使用
over.
原文链接:https://zhuanlan.zhihu.com/p/487015751

浙公网安备 33010602011771号