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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:55:08