目录
参考博客:https://www.cnblogs.com/xiaomingzaixian/p/7286793.html
0,版本:Python3.6
1,json.loads() 与 json.dumps()
简单理解:( 用于数据不同对象间的转换 )
json.loads(s) 将一个JSON格式的字符串对象s,反序列化为Python字典对象;
json.dumps(obj) 将一个Python字典对象obj,序列化为一个JSON格式的字符串对象;
注意,关于:json.dumps()
因为 JSON 中的“键-值对”的键永远是 str 类型。当一个 Python 对象被转化为 JSON 时,字典中所有的键都会被强制转换为 str 类型。因此字典被转换为 JSON 后,再转换回字典时可能和原来的不相等。也就是说,如果 x 具有非字符串的键,则有 loads(dumps(x)) != x。
代码验证:
import json
# test - 1
info = '{"name": "jack", "age": 18}'
json_info = json.loads(info)
print(type(json_info)) # <class 'dict'>
str_info = json.dumps(json_info)
print(type(str_info)) # <class 'str'>
# test - 2
info = {100: 1, 200: 2}
print(json.loads(json.dumps(info))) # {'100': 1, '200': 2} 键类型发生变化
2,json.load() 与 json.dump()
简单理解:( 用于读写 JSON 文件 )
json.load(fp) 将一个JSON文件反序列化一个Python字典对象;
json.dump(obj, fp) 将obj序列化为JSON文件;
测试用JSON文件:test.json
{
"cfg": {
"ip": "192.168.1.120",
"mask": "255.255.255.0"
}
}
读取操作:读取 test.json 文件
import json
with open("test.json", "r", encoding="utf-8") as fp:
json_obj = json.load(fp)
print(type(json_obj)) # <class 'dict'>
print(json_obj) # {'cfg': {'ip': '192.168.1.120', 'mask': '255.255.255.0'}}
写入操作:读取 test.json 后,将 ip 改为:192.168.1.230,并且添加网关:"gateway": "192.168.1.1"
import json
def json_test():
json_obj = {}
with open("test.json", "r", encoding="utf-8") as fp:
json_obj.clear()
json_obj = json.load(fp)
cfg = json_obj.get("cfg")
cfg["ip"] = "192.168.1.230"
cfg["gateway"] = "192.168.1.1"
with open("test.json", "w", encoding="utf-8") as fp:
json.dump(json_obj, fp, indent=4, ensure_ascii=False)
json_test()
"""
更改后的 test.json 文件:
{
"cfg": {
"ip": "192.168.1.230",
"mask": "255.255.255.0",
"gateway": "192.168.1.1"
}
}
"""