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

在Python(JupyterLab)中读取亚马逊JSON评论并提取字段遇报错

问题解决:处理JSON Lines格式的亚马逊评论数据

错误原因

  1. JSON格式不匹配:你的文件是JSON Lines格式(每行一个独立的JSON对象),但json.load()要求读取的是单个合法JSON结构(比如完整数组或单个对象),解析完第一行后还有后续内容,所以抛出JSONDecodeError。
  2. 代码逻辑错误:
    • 键名拼写错误:overal应为overall
    • 即使加载成功,data也不会是嵌套结构,不能用data['reviewText']['overall']['summary']这种方式取值

正确解决方案

方案一:逐行解析(推荐处理大文件)

逐行读取并解析每个JSON对象,避免一次性加载大量数据占用内存:

import json

# 存储提取后的结果
extracted_reviews = []

with open('Amazon_Instant_Video_5.json', 'r', encoding='utf-8') as json_file:
    for line in json_file:
        # 跳过空行
        cleaned_line = line.strip()
        if not cleaned_line:
            continue
        # 解析单行JSON
        review_obj = json.loads(cleaned_line)
        # 提取目标字段
        extracted = {
            'reviewText': review_obj['reviewText'],
            'overall': review_obj['overall'],
            'summary': review_obj['summary']
        }
        extracted_reviews.append(extracted)

# 验证前3条结果
for idx, review in enumerate(extracted_reviews[:3], 1):
    print(f"第{idx}条评论:")
    print(review)
    print("---")

方案二:转换为JSON数组后解析

如果需要一次性加载所有数据,可以先将文件内容转换为合法的JSON数组:

import json

with open('Amazon_Instant_Video_5.json', 'r', encoding='utf-8') as json_file:
    # 读取所有非空行
    valid_lines = [line.strip() for line in json_file if line.strip()]
    # 拼接成JSON数组格式
    json_array_str = f"[{','.join(valid_lines)}]"
    # 解析整个数组
    all_reviews = json.loads(json_array_str)

# 批量提取字段
extracted_reviews = [
    {
        'reviewText': item['reviewText'],
        'overall': item['overall'],
        'summary': item['summary']
    }
    for item in all_reviews
]

# 输出第一条结果示例
print(extracted_reviews[0])

注意事项

  • 处理数千条评论时,优先选择逐行解析的方式,降低内存消耗。
  • 确保字段名拼写准确,比如overall不要写成overal。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:30:55