【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