【Python】Json模块_dumps/loads编解码及dump/load读写文件格式转换
编码 json.dumps()
将字典或者列表转换为json格式的字符串。
示例:
s = {"name": "张三", "addr": "北京市"} print(json.dumps(s))
运行结果
{"name": "\u5f20\u4e09", "addr": "\u5317\u4eac\u5e02"}
json.dumps() 时数据包含中文会将中文转义为十六进制
官方注释:
ensure_ascii : true (即默认值),输出保证将所有输入的非 ASCII 字符转义。false,这些字符会原样输出。
s = {"name": "张三", "addr": "北京市"} print("ensure_ascii默认", json.dumps(s)) print("ensure_ascii=False", json.dumps(s, ensure_ascii=False)) print("ensure_ascii=True", json.dumps(s, ensure_ascii=True))
运行结果
ensure_ascii默认 {"name": "\u5f20\u4e09", "addr": "\u5317\u4eac\u5e02"} ensure_ascii=False {"name": "张三", "addr": "北京市"} ensure_ascii=True {"name": "\u5f20\u4e09", "addr": "\u5317\u4eac\u5e02"} 进程已结束,退出代码为 0
美化json输出
separators=(',', ':') # 去除json美化的空格
官方注释: sort_keys: true(默认为 False),那么字典的输出会以键的顺序排序。 indent : 非负整数或者字符串:那么 JSON 数组元素和对象成员会被美化输出为该值指定的缩进等级。
零、负数或者 "":则只会添加换行符。
None (默认值) :选择最紧凑的表达。
正整数:会让每一层缩进同样数量的空格。
字符串 (比如 "\t"):那个字符串会被用于缩进每一层
s = {"name": "张三", "addr": "北京市"} # 美化json mh_jd_s = json.dumps(s, ensure_ascii=False, sort_keys=True, indent=4) print(mh_jd_s)
运行结果
{ "addr": "北京市", "name": "张三" }
解码 json.loads()
将json格式字符串转换为python对象。且JSON对象必须是str、bytes或bytearray,而不是list
示例:
# coding:utf-8 import json if __name__ == "__main__": a = ["name", "zhangsan", "age", 18, "addr", "北京"] b = {"name": "zhangsan", "age": 18, "addr": "北京"} c = '{"name": "zhangsan", "age": 18, "addr": "北京"}' d = '["name", "age", "北京"]' print(a) print(b) print(type(a)) print(type(b)) cc = json.loads(c) dd = json.loads(d) print(type(cc)) print(cc) print(dd)
执行结果:
json.dump()
将字典或者列表转换为json格式的字符串并且写入到文件中。
示例
b = {"name": "zhangsan", "age": 18, "addr": "北京"} json.dump(b, open("./test.json", "w", encoding="utf-8"), ensure_ascii=False)
执行结果:
json.load()
从文件中读取json格式的字符串并且转换为python对象。
示例
af = json.load(open("./test.json", "r", encoding="utf-8")) print(af) print(type(af)) print(json.dumps(af))
执行结果:
参考链接:https://docs.python.org/zh-cn/3/library/json.html?highlight=json
拓展
转义dict
import ast import json dic1 = {"info": "abaaba", "recode": "200", "remsg": ""} dic2 = {"msg": "balabal", "state": "20000"} print(dic1) print(dic2) jd = json.dumps(str(dic2).replace("'", '"')) dic1.update({"remsg": ast.literal_eval(jd)}) print(json.dumps(dic1, ensure_ascii=False))
运行结果
{'info': 'abaaba', 'recode': '200', 'remsg': ''} {'msg': 'balabal', 'state': '20000'} {"info": "abaaba", "recode": "200", "remsg": "{\"msg\": \"balabal\", \"state\": \"20000\"}"} 进程已结束,退出代码为 0
-------------------------------------------------------------------------------------
如果万事开头难 那请结局一定圆满 @ Phoenixy
-------------------------------------------------------------------------------------