Python关于JSON文件的读取和字典与JSON字符串的转化问题
最近项目中在模拟发请求时需要用hmac sh256算法生成签名,一开始挺顺利的。但是一到这一块儿,不管怎么着计算出的签名都不对。百思不得其解,最终发现计算的算法要求发送的请求体是不带空格和换行的json字符串。
一开始用的是str直接转字符串,但是发现,str转化成的字典有下列问题:
- 转成的字符串的引号是单引号
- 转成的json串中含有空格
- None值需要替换成json格式的null
本身也就是一个查找替换的事儿,三个replace就能解决。
但是问题来了,如果字典的value值含有以上的情况下,查找替换可就出大问题了。我就遇到了值中含有空格的问题,让我折腾了很久。最后,找到了使用json库将dict转成无换行无空格的json字符串方法才得以解决,特此在这里做一个记录。
代码:
import json
# 读取json文件 -> dict
config = json.load(open("application.json", encoding="utf-8"))
print(f"{config}\n")
# dict -> json字符串
result = json.dumps(config)
print(f"{result}\n")
# dict -> json字符串 解决编码问题
result = json.dumps(config, ensure_ascii=False)
print(f"{result}\n")
# dict -> json字符串 indent参数控制格式化json
result = json.dumps(config, ensure_ascii=False, indent=2)
print(f"{result}\n")
# dict -> json字符串 无换行和空格
result = json.dumps(config, ensure_ascii=False, separators=(",", ":"))
print(f"{result}\n")
# dict -> json字符串 按照字典排序 a-z
result = json.dumps(config, ensure_ascii=False, separators=(",", ":"), sort_keys=True)
print(f"{result}\n")
结果:
{'name': '张三', 'age': 10}
{"name": "\u5f20\u4e09", "age": 10}
{"name": "张三", "age": 10}
{
"name": "张三",
"age": 10
}
{"name":"张三","age":10}
{"age":10,"name":"张三"}
以上就是本次的笔记,愿小伙伴们不迷路。