【Python】JSON编码和解码器 --> json.dump() 和json.loads()
编码 json.dumps()
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输出
官方注释: 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()
待补充
参考链接: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