当我们想要通过Python语言对json格式的文件进行读写操作的时候,首先我们需要引入json库
import json
我们使用Python标准库json库实现对json文件的基本读取和写入操作,在标准库中,主要涉及到四种方法:
json.dump
将一个python对象编码为json字符串并且保存到文件中
json.load
将一个json文件载入,并且返回一个python字典类型对象
json.dumps
将一个python对象编码为json字符串
json.loads
将一个json字符串转变为一个python字典对象
json.dumps方法
功能:将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)
例如:
import json
stu_json = json.dumps({"张三": "001", "李四":"002", "王五":"003"})
print(stu_json)
print(type(stu_json))
在上述代码中,我们把一个python字典类型的对象作为dumps方法的参数,并且打印方法的返回值和返回值的类型,得到如下输出:
{"\u5f20\u4e09": "001", "\u674e\u56db": "002", "\u738b\u4e94": "003"}
<class 'str'>
发现中文并没有正确显示,因此我们需要给dumps方法传入一个可选参数
ensure_ascii=False
,如下所示:
import json
stu_json = json.dumps({"张三": "001", "李四":"002", "王五":"003"}, ensure_ascii=False)
print(stu_json)
print(type(stu_json))
这个时候我们再次输出结果可以看到:
{"张三": "001", "李四": "002", "王五": "003"}
<class 'str'>
此时,程序的输出结果和我们的预期结果是一样的,中文被正确地显示出来了。通过
print(type(stu_json))
语句,我们可以看到输出结果是class ‘str’
即dumps方法的返回值是一个字符串类型的数据。
import json
stu_json = json.dumps({"张三": "001", "李四":"002", "王五":"003"}, ensure_ascii=False,indent=4
, sort_keys=True, separators=(',', ':'))
print(stu_json)
这里面,
ensure_ascii
参数为是否使用ascii码方式,对于中文显示来说我们要设置为False;indent
为设置每一个键值对前面的缩进空格数量;sort-keys
为是否对键进行排序,排序方式为按照ascii码的升序方式;separator
为设置分隔符,值得注意的是,分隔符的设置需要传入一个元组数据,第一个参数是分隔不同键值对之间的分隔符;第二个参数是分隔同一个键值对中,键和值之间的分隔符。代码运行结果如下:
{
"张三":"001",
"李四":"002",
"王五":"003"
}
json.loads方法
功能:将一个json字符串转变为一个python字典对象
我们将刚刚输出的字符串当作参数传给loads方法,代码如下:
import json
stu_dict = json.loads("""{
"张三":"001",
"李四":"002",
"王五":"003"
}""")
print(stu_dict)
print(type(stu_dict))
运行结果如下:
{'张三': '001', '李四': '002', '王五': '003'}
<class 'dict'>
通过输出结果不难发现,loads方法成功将json字符串对象转变成了python字典类型对象。
json文件操作——json.dump方法
大多数情况下,我们都需要进行json文件操作,json标准库中提供的
json.dump
方法就可以实现将python字典对象编码成json字符串对象并且保存到文件之中。以下是一个演示代码:
import json
stu_dict = {
"张三":"001",
"李四":"002",
"王五":"003"
}
with open('test.json', 'w') as f: # 用写方式打开一个名为test.json的文件,如果不存在,则创建它
json.dump(stu_dict, f) # 写入文件
运行程序,就可以看到在这个.py文件的目录下会产生一个新建的
test.json
文件,打开可以看到文件内容:
{"\u5f20\u4e09": "001", "\u674e\u56db": "002", "\u738b\u4e94": "003"}
类似地,如果想要正确显示中文并且格式更加美观,我们依然需要向dump方法中传入必要的参数:
import json
stu_dict = {
"张三":"001",
"李四":"002",
"王五":"003"
}
with open('test.json', 'w') as f:
json.dump(stu_dict, f, ensure_ascii=False, indent=4, separators=(',', ':'))
再次运行程序就可以看到新建的文件内容已经符合我们的预期:
{
"张三":"001",
"李四":"002",
"王五":"003"
}
json文件操作——json.load方法
方法功能是从文件中读取json字符串,并且转换为python中的字典类型对象。我们将上一步中生成的
test.json
作为例子演示效果:
import json
with open('test.json', 'r') as f: # 以读方式打开文件
stu_dict = json.load(f)
print(stu_dict)
print(type(stu_dict))
程序运行结果如下:
{'张三': '001', '李四': '002', '王五': '003'}
<class 'dict'>
这样我们就成功实现了python语言读取json文件并且将其转化为字典(dict)对象。