Python出现JSONDecodeError报错时如何定位出错的具体字符位置?
定位JSONDecodeError错误位置的方法
1. 直接输出错误位置上下文定位
json.loads报错给出的char索引从0开始计数,直接对原始字符串切片就能看到对应位置的内容,示例代码如下:
import json # 替换为你自己的待解析JSON字符串 raw_json_str = '你的原始JSON字符串' error_char_index = 1205 # 打印错误位置前后50个字符的上下文,方便定位场景 print("错误位置前50个字符:", raw_json_str[max(0, error_char_index - 50): error_char_index]) # 用repr()可以直接展示不可见控制字符的转义形式,不会被吞 print("错误位置的字符:", repr(raw_json_str[error_char_index])) print("错误位置后50个字符:", raw_json_str[error_char_index + 1: min(len(raw_json_str), error_char_index + 51)])
2. 常见报错原因及修复
你提供的示例JSON本身就有两个容易触发该报错的问题:
- 数组末尾多余逗号:
results数组最后一个对象末尾多了逗号,JSON标准不允许数组/对象的最后一个元素后加逗号,需要删除。 - 未转义的控制字符:如果字符串中包含换行、制表符、退格等不可见控制字符且没有做转义处理,就会触发控制字符非法报错。如果不需要严格校验可以加
strict=False参数临时兼容:
parse_result = json.loads(raw_json_str, strict=False)
如果要彻底解决问题,还是建议根据上面的定位方法找到对应控制字符,手动转义或者删除处理。
内容的提问来源于stack exchange,提问作者jos97
相关产品推荐
相关产品推荐

