JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写。
这次就简单介绍下python下关于JSON字符串的编解码以及存储
目录
python使用JSON函数需要先导入JSON库:import json
json 库主要包含两对函数:
1、json.dumps() 与 json.loads()
2、json.dump() 与 json.load()
这两对函数分别用于将python对象与JSON字符串之间的编解码,其中第二对函数可以将python对象编码为json字符串后存入文件中,以备将来之用
关于这两对函数的基本用法做一个简单简绍:
1、json.dumps()
将python对象转化为JSON字符串类型
#encoding:utf-8
import json
user1 = {
"name": "SheenChi",
"sex": "male",
"age": 23
}
user2 = {
"name" : "Jack",
"sex" : "female",
"age" : 10
}
testList = [user1, user2]
dict_dumps = json.dumps(user1)
list_dumps = json.dumps(testList)
print(type(list_dumps))
print(type(dict_dumps))
print(dict_dumps)
print(list_dumps)
运行上边的代码可以得到下面的结果,从结果可以知道,无论是字典类型:user1,还是列表里嵌套字典的list类型:testList
经过json.dumps() 转换就会变成json字符串类型
<class 'str'>
<class 'str'>
{"name": "SheenChi", "age": 23, "sex": "male"}
[{"name": "SheenChi", "age": 23, "sex": "male"}, {"name": "Jack", "age": 10, "sex": "female"}]
此时输出list_dumps的第一个元素,由下边的结果可以看到,结果是字符串的一个元素
print(list_dumps[0])
[
如果感觉直接将list转换为json字符串的形式,有点不容易观察,也可以在转换时设置格式化转换,代码如下:
a = json.dumps(testList, indent=4, separators=(',', ': '))
print(a)
输出结果如下,虽然是字符串,但现在看上去也很直观
[
{
"name": "SheenChi",
"age": 23,
"sex": "male"
},
{
"name": "Jack",
"age": 10,
"sex": "female"
}
]
2、json.loads()
通过json.loads() 可以经json字符串转换为原来的python类型,用法如下:
list_loads = json.loads(list_json)
print(type(list_loads))
print(list_loads)
<class 'list'>
[{'name': 'SheenChi', 'age': 23, 'sex': 'male'}, {'name': 'Jack', 'age': 10, 'sex': 'female'}]
此时再输出list_loads的第一个元素,可以得到列表中的第一个字典
print(list_loads[0])
{'name': 'SheenChi', 'age': 23, 'sex': 'male'}
3、json.dump()
json.dump()和json.dumps() 功能类似,只不过将转换后的结果直接存入到了文件中,代码如下:
with open("dump.txt", "w", encoding="utf-8") as fw:
json.dump(testList, fw)
运行代码后会生成dump.txt文件,里面保存是json字符串
[{"sex": "male", "name": "SheenChi", "age": 23}, {"sex": "female", "name": "Jack", "age": 10}]
这里文件的打开方式为w,不能通过为二进制wb, 当遇到一些不想让他人直接查看内容情况,需要保存为二进制,此时需要另一个函数模块:pickle 序列化存储模块,稍后简单概括
4、json.load()
用来读取通过json.dump()保存的json字符串,并将字符串转换为原有的python类型
with open("dump.txt", "r", encoding="utf-8") as fr:
load_list = json.load(fr)
print("type load_list: ",type(load_list))
print(load_list)
运行代码后结果如下:
type load_list: <class 'list'>
[{'sex': 'male', 'name': 'SheenChi', 'age': 23}, {'sex': 'female', 'name': 'Jack', 'age': 10}]
5、pickle.dump()
with open("dump.txt", "wb") as fw:
pickle.dump(testList, fw)
6、pickle.load()
with open("dump.txt", "rb") as fr:
load_list = pickle.load(fr)
print("type load_list: ",type(load_list))
print(load_list)
type load_list: <class 'list'>
[{'sex': 'male', 'name': 'SheenChi', 'age': 23}, {'sex': 'female', 'name': 'Jack', 'age': 10}]