为何Python JSON输出总会添加转义字符?如何消除多余转义?
解决Python JSON转义字符重复问题
问题出在你手动对/做转义后,又经过了JSON的序列化与反序列化流程:
- 你把
test/file.jpg替换成test\/file.jpg,此时字符串实际存储的是test\file.jpg(\/是Python里的转义写法,对应一个\加/)。 - 调用
json.dumps()时,JSON编码器会识别字符串中的\为需要转义的字符,自动给它再加一个转义符,变成\\/。 - 后续
json.loads()读取后,\\会被保留为字符串里的实际字符,所以最终Python对象里的url是test\\/file.jpg,打印时就会显示这个结果。
正确处理方式
场景1:不需要强制转义/(绝大多数正常场景)
JSON规范中/不需要转义,json.dumps()会自动处理必要的转义操作,完全不需要手动替换:
import json jsonData = { 'url': 'test/file.jpg' } # 直接序列化生成JSON字符串 json_data = json.dumps([jsonData]) print('JSON字符串输出:') print(json_data) # 加载为Python对象后,打印的是Python对字符串的表示,实际内容是正确的 loaded_data = json.loads(json_data) print('加载后的Python对象:') print(loaded_data)
输出结果:
JSON字符串输出: [{"url": "test/file.jpg"}] 加载后的Python对象: [{'url': 'test/file.jpg'}]
场景2:必须在JSON中保留\/(特殊需求场景)
如果确实需要JSON字符串里出现\/,直接构造包含\/的原始字符串(注意Python里要用\\/表示单个\/),再进行序列化:
import json # 直接构造包含\\/的字符串,对应JSON里的\/ jsonDataCustom = { 'url': 'test\\/file.jpg' } json_data_custom = json.dumps([jsonDataCustom]) print('包含\\/的JSON字符串输出:') print(json_data_custom) # 写入文件验证实际内容 with open('test.json', 'w') as f: f.write(json_data_custom)
此时生成的test.json文件内容为:
[{"url": "test\/file.jpg"}]
而Python加载后打印的对象会显示[{'url': 'test\\/file.jpg'}],这是Python对字符串中\的表示方式,不影响实际的JSON内容。
内容的提问来源于stack exchange,提问作者Bravo Net
相关产品推荐
相关产品推荐

