You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Python JSON输出总会添加转义字符?如何消除多余转义?

解决Python JSON转义字符重复问题

问题出在你手动对/做转义后,又经过了JSON的序列化与反序列化流程:

  1. 你把test/file.jpg替换成test\/file.jpg,此时字符串实际存储的是test\file.jpg(\/是Python里的转义写法,对应一个\加/)。
  2. 调用json.dumps()时,JSON编码器会识别字符串中的\为需要转义的字符,自动给它再加一个转义符,变成\\/。
  3. 后续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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 21:09:25