【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

 

posted @ 2022-01-17 12:54  Phoenixy  阅读(910)  评论(0编辑  收藏  举报