Python解析Reddit评论JSON时触发JSONDecodeError,求解决方案
解决Python中JSONDecodeError: Expecting property name enclosed in double quotes的问题
兄弟,我帮你捋捋这个问题——你遇到的这个错误本质就是JSON格式不达标,毕竟JSON规范死得很:所有属性名必须用双引号括起来,一点含糊都没有。结合你用的是Reddit评论数据集,我大概率能猜到几个常见坑,给你逐个排查解决:
先定位出错的具体行
你用row = json.loads(row)按行解析文件,那大概率是某一行的JSON格式有问题。先加个异常捕获把错误行揪出来,这样能精准定位问题:import json file_path = 'learn\\learning_data\\2015\\RC_2015-05' with open(file_path, 'r', encoding='utf-8') as f: for line_num, row in enumerate(f, 1): try: parsed_row = json.loads(row) # 这里写你处理数据的逻辑 except json.JSONDecodeError as e: print(f"第{line_num}行炸了: {e}") print(f"出错行内容: {row.strip()}") # 要么跳过该行,要么手动修复格式跑这段代码后,你就能看到到底是哪行出问题,比如是不是用了单引号代替双引号,或者括号不匹配、多了逗号之类的。
常见问题的快速修复
如果排查后发现是单引号的问题(比如某行是{'created_utc': '1430438400'}这种),可以用Python的ast.literal_eval()代替json.loads()——它能解析符合Python语法的字典字符串,对单引号兼容:import ast # 把json.loads(row)换成下面这行 parsed_row = ast.literal_eval(row)要是遇到空行或者开头有奇怪的空白字符,记得先清理:
row = row.strip() if not row: continue # 跳过空行 parsed_row = json.loads(row)排查文件编码或格式类型
有时候文件可能带BOM头(比如UTF-8 BOM),导致解析失败,试试用utf-8-sig编码打开:with open(file_path, 'r', encoding='utf-8-sig') as f: # 后续逻辑不变另外确认下文件是不是JSON Lines格式(每行一个独立JSON),要是整个文件是一个大数组(开头
[结尾]),那得整个文件读取解析:with open(file_path, 'r', encoding='utf-8') as f: all_data = json.load(f) for parsed_row in all_data: # 处理每个评论
内容的提问来源于stack exchange,提问作者Tom Jaquo
相关产品推荐
相关产品推荐

