JSON是用于存储和交换数据的语法,是一种轻量级的数据交换格式。经常用于接口数据传输、序列化、配置文件等
json的形式有2种:键值对形式)、数组形式
json的数据形式与python的还是有差别的:
python可以通过json库,解析字符串或文件中的内容转为json字符串或python的字典或列表
方法 | 说明 |
---|---|
dumps() | 将Pythoin对象编码成json字符串 |
loads() | 解码json数据,返回python对象 |
dump() | 将python对象编码成json数据并写入json文件中 |
load() | 从json文件中读取数据并解码为Python对象 |
dumps()和loads()是json字符串和python对象之间的转化
示例:
将python对象转成json字符串
import json
data = {
"dict": {
"d1": "v1",
"d2": None
},
"list": [1, 3.56, "12a", (33, -4.4)],
"str": "str_value",
"bool_t": True,
"bool_f": False,
"NON": None
}
json_data = json.dumps(data)
print(type(json_data))
print(json_data)
执行结果为:
{"dict": {"d1": "v1", "d2": null}, "list": [1, 3.56, "12a", [33, -4.4]], "str": "str_value", "bool_t": true, "bool_f": false, "NON": null}
将json字符串转成python对象:
import json
data = '''{
"dict":{
"d1":"v1",
"d2":null
},
"list":[
1,
3.56,
"12a",
[
33,
-4.4
]
],
"str":"str_value",
"bool_t":true,
"bool_f":false,
"NON":null
}
'''
json_data = json.loads(data)
print(type(json_data))
print(json_data)
执行结果为:
{'dict': {'d1': 'v1', 'd2': None}, 'list': [1, 3.56, '12a', [33, -4.4]], 'str': 'str_value', 'bool_t': True, 'bool_f': False, 'NON': None}
dump()和load()是json文件和python对象之间的转化
import json
data = {
"key1": "值1",
"key2": 222,
"key3": [12, True, False, None, "1ab"]
}
with open("data.json", "w") as f:
# 将Python对象存入json文件
json.dump(data, f)
print("--------------------------")
with open("data.json", "r") as f:
# 从文件中读取json数据并转成python对象
content = json.load(f)
print(type(content))
print(content)
执行成功后,data.json文件内容如下:
{"key1": "\u503c1", "key2": 222, "key3": [12, true, false, null, "1ab"]}
中文被Unicode编码了
从以上示例中可以看出,python对象转成json字符串或文件时(dumps()和dump()),是紧挨着的,如果想清楚的看出层级关系,可以使用indent设置缩进空格数
import json
data = {
"key1": "值1",
"key2": {"key21": "value21", "key22": 22},
"key3": [12, True, False, None, "1ab"]
}
json_data = json.dumps(data, indent=4)
print(json_data)
执行结果为:
{
"key1": "\u503c1",
"key2": {
"key21": "value21",
"key22": 22
},
"key3": [
12,
true,
false,
null,
"1ab"
]
}
ensure_ascii:对中文使用ASCII编码,默认为True,也就是说在转成json数据时,中文会被编码,如果不想中文被编码,可以将其设置成False
C:\py310\python.exe E:/hogwart/work/wen.py
{
"key1": "\u503c1",
"key2": {
"key21": "value21",
"key22": 22
}
}
------------------和平分割线------------------
{
"key1": "值1",
"key2": {
"key21": "value21",
"key22": 22
}
}
Process finished with exit code 0
执行结果为:
{
"key1": "\u503c1",
"key2": {
"key21": "value21",
"key22": 22
}
}
------------------和平分割线------------------
{
"key1": "值1",
"key2": {
"key21": "value21",
"key22": 22
}
}