如何生成含单反斜杠双引号格式的Python JSON内容对象?
问题:JSON嵌套字符串出现多余反斜杠的解决方法
现有Python代码如下:
import json data = {"name": "John", "age": 30, "city": "New York"} print(data) json_string = json.dumps(data, indent=4) print(json_string) json_string_escaped = json_string.replace('"','\\"') print(json_string_escaped) dataone = {"json_string": json_string_escaped} print(dataone)
执行后,json_string_escaped的输出符合预期:
{ \"name\": \"John\", \"age\": 30, \"city\": \"New York\" }
但将转义后的字符串放入dataone字典并打印时,出现了多余的反斜杠:
{'json_string': '{ \\\"name\\\": \\\"John\\\", \\\"age\\\": 30, \\\"city\\\": \\\"New York\\\" }'}
需要让dataone对应的JSON格式中,字符串仅保留单反斜杠+双引号的格式,以符合REST API的要求。
解决方法
原因分析
你看到的多余反斜杠是Python打印字典时的字符串表示形式导致的——Python会把字符串里的单个反斜杠显示为两个(因为反斜杠本身是转义符),但这并不代表字符串实际存储的内容。真正要生成符合API要求的JSON格式,不需要手动转义,应该交给json模块自动处理。
正确代码
直接将未手动转义的json_string放入字典,再对整个字典执行一次json.dumps,就能得到正确的嵌套JSON格式:
import json data = {"name": "John", "age": 30, "city": "New York"} json_string = json.dumps(data, indent=4) # 不需要手动replace转义 dataone = {"json_string": json_string} # 对整个字典做JSON序列化,自动处理嵌套字符串的转义 final_json = json.dumps(dataone, indent=4) print(final_json)
输出结果
执行后会得到符合API要求的格式:
{ "json_string": "{\n \"name\": \"John\",\n \"age\": 30,\n \"city\": \"New York\"\n}" }
如果需要保留换行的格式化输出(而非转义后的\n),可以使用json.dumps的ensure_ascii=False参数,或者直接将最终的JSON字符串用于API请求——API接收的是标准JSON格式,会自动解析其中的转义符。
为什么手动转义会出问题
手动用replace('"', '\\"')转义后,字符串里的每个双引号前都有一个反斜杠。当把这个字符串放入字典后,Python在打印字典的repr形式时,会把每个反斜杠再转义一次(变成\\),所以你看到了\\\"。但实际字符串内容是正确的,只是打印显示的问题。不过手动转义容易出错,交给json模块处理才是标准做法。
内容的提问来源于stack exchange,提问作者Ladislav Zitka
相关产品推荐
相关产品推荐

