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

无法加载含Unicode字符串的JSON数据,json.loads报错该如何解决?

解决JSON Unicode转义导致json.loads()报错的问题

嘿,这个坑我之前踩过!当JSON里的内部字符串带Unicode转义格式(比如\uXXXX)但没被正确处理时,json.loads()确实会抛出错误。咱们根据常见情况一步步来解决:

情况1:字符串存在双重转义(最常见)

如果你的mystring是双重编码的结果——比如先把JSON对象转成字符串,又对这个字符串做了一次JSON编码,就会变成类似这样:

mystring = '"{\\"content\\": \\"\\\\u4F60\\\\u597D\\\\u4E16\\\\u754C\\"}"'

这时候直接用json.loads()只会得到一个字符串,而不是JSON对象。需要分两次解析:

import json

# 第一步:解析外层,拿到原始的JSON字符串
raw_json_str = json.loads(mystring)
# 第二步:解析内层,得到最终的JSON对象
data = json.loads(raw_json_str)
print(data["content"])  # 输出:你好世界

情况2:Unicode转义序列不合法

如果报错提示类似Invalid \uXXXX escape,说明转义格式有问题:比如\u后面不足四位十六进制数,或者包含无效的Unicode码点。这时候可以用正则先修复:

import re
import json

def fix_bad_unicode_escapes(s):
    # 补全不完整的\u转义(比如把\u123改成\u0123)
    s = re.sub(r'\\u([0-9a-fA-F]{1,3})', 
               lambda m: f'\\u{"0"*(4-len(m.group(1)))}{m.group(1)}', 
               s)
    # 移除单独的无效代理字符(可选,根据需求调整)
    s = re.sub(r'\\uD[89AB][0-9a-fA-F]{2}', '', s)
    return s

fixed_str = fix_bad_unicode_escapes(mystring)
data = json.loads(fixed_str)

情况3:字符串是未解码的字节流

如果你的mystring其实是字节类型(比如从文件读取时没做解码),得先转成字符串再解析:

import json

# 假设mystring是bytes类型,用对应编码解码(比如utf-8)
decoded_str = mystring.decode('utf-8')
data = json.loads(decoded_str)

终极小技巧:用ast.literal_eval()兜底

要是以上方法都不好使,可以试试用ast.literal_eval()先把字符串转成Python原生对象,再处理:

import ast
import json

# 先转成Python字典/列表
python_obj = ast.literal_eval(mystring)
# 再转成JSON格式的对象
data = json.loads(json.dumps(python_obj))

内容的提问来源于stack exchange,提问作者Akshay Patil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 06:58:30