1、json.dumps()和json.loads()函数
说明:
- json.dumps()函数是将一个Python数据类型进行json格式的编码(简单理解,json.dumps()函数是将字典转化为字符串)
- json.loads()函数是将json格式数据转换为字典(简单理解,json.loads()函数是将字符串转化为字典)
实例代码:
# -*- coding: utf-8 -*-
import json
data = {
'Mr Liu':{
'sex': 'man',
'address': '上海',
'age': '31'
},
'Mrs Xie':{
'sex': 'woman',
'address': '天津',
'age': '30'
}
}
jsObj = json.dumps(data, sort_keys=True, indent=4, separators=(',',':'), ensure_ascii=False) # 格式化输出json串
print('data的类型:'+ str(type(data)))
print(data)
print('jsObj的类型: '+ str(type(jsObj)))
print(jsObj)
dataNew = json.loads(jsObj) # 将json串又转换为数据类型字典
print('dataNew的类型: '+ str(type(dataNew)))
print(dataNew)
打印结果如下:
data的类型:<class 'dict'>
{'Mrs Xie': {'age': '30', 'address': '天津', 'sex': 'woman'}, 'Mr Liu': {'age': '31', 'address': '上海', 'sex': 'man'}}
jsObj的类型: <class 'str'>
{
"Mr Liu":{
"address":"上海",
"age":"31",
"sex":"man"
},
"Mrs Xie":{
"address":"天津",
"age":"30",
"sex":"woman"
}
}
dataNew的类型: <class 'dict'>
{'Mrs Xie': {'age': '30', 'address': '天津', 'sex': 'woman'}, 'Mr Liu': {'age': '31', 'address': '上海', 'sex': 'man'}}
json.dumps()参数说明:
- sort_keys:将数据根据key值按照字典排序(a到z)进行排序输出
- indent:应该是一个非负的整型,如果是0,或者为空,则一行显示数据;否则会换行且按照indent的数量显示前面的空白
- separators=(’,’,’:’):其作用是 去掉 逗号(,)和分号(:)后面的空格
- ensure_ascii:序列化时对中文默认使用的ascii编码;想输出真正的中文需要指定ensure_ascii=False
2、将字典内容写入json文件
注意:如果想要将字典内容写入json文件时,需要用json.dumps将字典转换为字符串,然后再写入;否则会报错!!(TypeError: write() argument must be str, not dict)
例如:
# -*- coding: utf-8 -*-
import json
data = {
'Mr Liu':{
'sex': 'man',
'address': '上海',
'age': '31'
},
'Mrs Xie':{
'sex': 'woman',
'address': '天津',
'age': '30'
}
}
with open('data.json', 'w') as f: # data.json为当前目录下的 json文件
f.write(data)
运行结果如下:
从上面的运行结果,可以看到:要想将字典信息写入到json文件中,必须先要将dict转换为str才可以!!,如下操作可以成功:
# -*- coding: utf-8 -*-
import json
data = {
'Mr Liu':{
'sex': 'man',
'address': '上海',
'age': '31'
},
'Mrs Xie':{
'sex': 'woman',
'address': '天津',
'age': '30'
}
}
jsObj = json.dumps(data, sort_keys=True, indent=4, separators=(',',':'), ensure_ascii=False) # 格式化输出json串
with open('data.json', 'w') as f: # data.json为当前目录下的 json文件
#f.write(data)
f.write(jsObj)
运行结果:
然后打开data.json文件,可以看到如下内容:
上面是通过文件的write()方法写入json文件,我们还可以通过使用json模块中的dump()方法,如下:
# -*- coding: utf-8 -*-
import json
data = {
'Mr Liu':{
'sex': 'man',
'address': '上海',
'age': '31'
},
'Mrs Xie':{
'sex': 'woman',
'address': '天津',
'age': '30'
}
}
with open('data1.json', 'w') as f:
#f.write(data)
#f.write(jsObj)
json.dump(data, f, indent=4, ensure_ascii=False)
运行结果:
打开data1.json文件看到如下结果:
从结果中我们看到与用write()方法的结果一样。
3、从json文件中读取数据
实例代码:
# -*- coding: utf-8 -*-
import json
file = open('data.json', 'r')
info = json.load(file)
print(info)
print(type(info))
for key in info.keys():
print('key: %s value: %s' % (key, info.get(key)))
运行结果:
{'Mr Liu': {'age': '31', 'address': '上海', 'sex': 'man'}, 'Mrs Xie': {'age': '30', 'address': '天津', 'sex': 'woman'}}
<class 'dict'>
key: Mr Liu value: {'age': '31', 'address': '上海', 'sex': 'man'}
key: Mrs Xie value: {'age': '30', 'address': '天津', 'sex': 'woman'}