Python中decode('unicode_escape')导致json字符串中的\"被转义,如何避免解析错误?

Python中decode(‘unicode_escape’)导致json字符串中的"被转义,如何避免解析错误?

3 回复

遇到这种问题是因为unicode_escape编解码器会把字符串里的\"转义成",破坏了JSON格式。

比如你有一个带转义引号的JSON字符串:

import json

# 原始字符串(注意这里双引号被转义了)
raw_str = '{"name": "test\\"value"}'
print('原始字符串:', repr(raw_str))
# 输出: '{"name": "test\\"value"}'

# 如果你先做 decode('unicode_escape')
decoded = raw_str.encode('utf-8').decode('unicode_escape')
print('decode后:', repr(decoded))
# 输出: '{"name": "test"value"}'   ← 这里引号错乱了,不是合法JSON了

# 再json.loads会报错
# json.loads(decoded)  # JSONDecodeError

正确做法
不要对JSON字符串整体用unicode_escape解码,而是直接用json.loads()解析,它会正确处理转义。

import json

raw_str = '{"name": "test\\"value"}'
# 直接解析
data = json.loads(raw_str)
print(data)  # {'name': 'test"value'}

如果字符串里确实有\uXXXX这样的Unicode转义序列,json.loads()也能正常解析,不需要提前decode。

总结:别在JSON字符串上乱用unicode_escape


我今天也遇到这个问题,使用 json.dumps(jsonObject,ensure_ascii=False) 可以决绝

哈哈,两年了,我都忘了这个问题解决没有了

回到顶部