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

使用json.loads解析类JSON字符串时遇JSONDecodeError逗号分隔符错误

解决JSONDecodeError: Expecting ',' delimiter问题

嘿,我来帮你搞定这个JSON解析报错的问题!你现在的问题根源在于一刀切删除所有空格的操作——raw_json.replace(" ","").replace("\n","")不仅会删掉JSON里无关的缩进空格,还会把字符串值里的有效空格(比如"137 314"里的空格)也干掉,甚至可能不小心破坏JSON的语法结构,这才导致了解析器找不到逗号分隔符的错误。

正确的处理姿势

其实JSON解析器本身就会自动忽略多余的换行、缩进和空格,完全不需要你手动去删!直接试试下面的代码,大概率就能正常解析:

import json

try:
    data = json.loads(raw_json)
    print("搞定!解析成功啦")
except json.JSONDecodeError as e:
    print(f"还是报错了:{e}")
    # 打印错误位置附近的内容,方便你排查问题
    print(f"错误位置附近的内容:{raw_json[max(0, e.pos-20):e.pos+20]}")

如果你的原始raw_json里确实有一些奇怪的干扰字符(比如全角空格、看不见的控制字符),可以用正则表达式只清理这些无效字符,保留正常的空格:

import json
import re

# 移除换行、制表符这类空白字符,保留字符串里的正常空格
cleaned_json = re.sub(r'[\n\t]', '', raw_json)
# 如果还有问题,再试试移除所有非打印的控制字符
# cleaned_json = re.sub(r'[\x00-\x1f\x7f]', '', cleaned_json)

try:
    data = json.loads(cleaned_json)
    print("解析成功!")
except json.JSONDecodeError as e:
    print(f"解析错误:{e}")
    print(f"错误位置附近:{cleaned_json[max(0, e.pos-20):e.pos+20]}")

关于原始字符串的疑问

你提到不知道怎么把字符串转为原始字符串——如果raw_json是你自己写的字符串常量,只要在前面加个r前缀就行,比如:

raw_json = r'''{ "search": { "levier": "Recherchedepuislaliste", "nbresults": "137 314", ... } }'''

但如果raw_json是从文件、API或者其他地方读取来的,根本不需要转成原始字符串,直接传给json.loads就好啦。

再排查下你的JSON内容

你提供的JSON片段本身是有效的,但你用replace(" ","")处理后,虽然语法上没问题,但如果你的原始raw_json里还有其他隐藏问题(比如全角空格、未转义的引号、数组最后多了逗号),也会导致报错。用上面的错误位置打印代码,就能快速定位到哪里出问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:02:45