json.dumps中字符串变量表现异常的问题排查与解决
问题原因与解决方案
问题根源
你遇到的问题是二次JSON序列化导致的:compiled_string本身已经是JSON格式的字符串,当你把它直接传给json.dumps()时,函数会把它当成普通字符串处理——给它套上双引号,同时转义内部的所有引号,最终API收到的required_data是一个字符串而非预期的JSON对象,自然无法正常解析。
两种解决办法
方法1:直接使用Python字典(推荐)
不要把compiled_string做成字符串,而是保持Python字典格式,直接传给json.dumps():
# 把原来的compiled_string改成字典 compiled_dict = {"uuid1": {"uuid2": 1.0,"uuid3": 123.0}, "uuid4": {"moreuuids": 2.3}} # 直接传入字典,json.dumps会正确序列化整个结构 payload_with_variable = json.dumps({ "field1": "value1", "name" : "funtimes", "required_data" : compiled_dict })
方法2:将现有JSON字符串解析为字典
如果compiled_string是从外部获取的现成JSON字符串(比如文件、其他接口返回),先用json.loads()把它转成Python字典,再传入json.dumps():
import json # 假设compiled_string是已有的JSON字符串 compiled_string = '{"uuid1": {"uuid2": 1.0,"uuid3": 123.0}, "uuid4": {"moreuuids": 2.3}}' # 解析为字典 compiled_dict = json.loads(compiled_string) # 生成正确的payload payload_with_variable = json.dumps({ "field1": "value1", "name" : "funtimes", "required_data" : compiled_dict })
为什么手动移除转义符没用?
手动处理字符串容易遗漏边缘情况(比如嵌套引号、特殊字符),而且本质上是在修复二次序列化带来的错误,不如从根源避免二次序列化更可靠。
内容的提问来源于stack exchange,提问作者Mohammed Mahfuz
相关产品推荐
相关产品推荐

