使用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
相关产品推荐
相关产品推荐

