Python关于JSON文件的读取和字典与JSON字符串的转化问题

本文介绍了在Python中如何使用json库进行JSON文件的读取、字典与JSON字符串之间的转换,并解决了在转换过程中遇到的空格、单引号和None值问题。通过示例代码展示了如何生成无换行和空格的JSON字符串,以及如何对字典进行排序。对于需要发送不带空格和换行的JSON字符串的场景,这些方法非常实用。
摘要由CSDN通过智能技术生成

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":"张三"}

以上就是本次的笔记,愿小伙伴们不迷路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Anesthesia丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值