json.loads()解析含转义字符的错误格式JSON失败求助
处理格式错误的JSON字符串
问题根源
你提供的JSON字符串存在未正确转义的双引号:在targetval字段的值中,:"?里的双引号没有用反斜杠转义,违反了JSON语法规则,导致json.loads()解析失败。
另外你尝试的json.loads(json.dumps(str))无效的原因是:json.dumps(str)只是把Python字符串转换成JSON格式的字符串(给原字符串套双引号并转义内部特殊字符),解析后得到的还是原错误字符串,而非字典,二次解析自然也会失败。
解决方案
方案1:手动修复关键转义错误(适合固定格式的错误)
针对这个特定字符串,找到未转义的双引号并替换为转义后的形式:
import json # 注意:实际Python中定义该字符串时需要正确转义内部引号 original_str = '{"targetfid":33,"targetval":"~!@#$%^&*,,,,()_+:"?<,,./\';[]\\"","models_dbid":"dbidvalue"}' # 修复targetval里未转义的双引号 fixed_str = original_str.replace(':"?', ':\\"?') # 解析修复后的字符串 result = json.loads(fixed_str) print(result) # 输出:{'targetfid': 33, 'targetval': '~!@#$%^&*,,,,()_+:"?<,,./\';[]"', 'models_dbid': 'dbidvalue'}
方案2:使用容错JSON解析库(适合复杂/多变的错误格式)
如果错误格式不固定,推荐使用支持宽松解析的第三方库,比如demjson:
- 先安装库:
pip install demjson
- 用宽松模式解析错误JSON:
import demjson original_str = '{"targetfid":33,"targetval":"~!@#$%^&*,,,,()_+:"?<,,./\';[]\\"","models_dbid":"dbidvalue"}' # 启用非严格模式解析,自动修复常见转义错误 result = demjson.decode(original_str, strict=False) print(result)
内容的提问来源于stack exchange,提问作者Dan Kunj
相关产品推荐
相关产品推荐

