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

Python解析Yelp大JSON文件时每次执行返回不同行的问题排查

Yelp大JSON数据集解析问题排查与解决

问题根源

你遇到的索引越界、同一行解析结果不一致,大概率是以下两个原因:

  • JSON格式与逐行读取逻辑不匹配:Yelp数据集有两种常见格式——一种是每行一个独立JSON对象(JSON Lines),另一种是整个文件为一个大JSON数组。如果是大数组格式,直接逐行读取会拿到不完整的JSON片段(比如带逗号的行、开头的[或结尾的]),解析时出错导致内容混乱。
  • 解析函数逻辑错误:如果你的函数里用了手动拆分字符串(比如按逗号分割)的操作,JSON对象内部的字符串字段可能包含逗号,这种拆分会彻底破坏结构,导致每次解析结果随机出错。

解决步骤

1. 先确认数据集格式

打开JSON文件查看前几行:

  • 如果第一行是{,每行都是完整JSON对象,属于JSON Lines格式,处理最简单。
  • 如果第一行是[,后续行是{...},,最后一行是{...}],属于大数组格式,需要处理分隔符。

2. 对应格式的正确解析代码

JSON Lines格式(推荐)

import json
import pandas as pd

def json_parser(file_path, sample_size=1000):
    data = []
    with open(file_path, 'r', encoding='utf-8') as f:
        for idx, line in enumerate(f):
            if idx >= sample_size:
                break
            line = line.strip()
            if not line:
                continue
            try:
                data.append(json.loads(line))
            except json.JSONDecodeError as err:
                print(f"第{idx+1}行解析失败: {err}")
                continue
    return pd.DataFrame(data)

# 调用示例,取500条样本
sample_df = json_parser('yelp_data.json', sample_size=500)

大JSON数组格式

import json
import pandas as pd

def json_parser(file_path, sample_size=1000):
    data = []
    with open(file_path, 'r', encoding='utf-8') as f:
        # 跳过开头的[
        first_line = f.readline().strip()
        if first_line != '[':
            f.seek(0)  # 不是数组格式,回到文件开头重新读
        for idx, line in enumerate(f):
            if idx >= sample_size + 1:  # 加1是因为跳过了第一行的[
                break
            line = line.strip()
            if not line or line == '[':
                continue
            # 去掉行尾的逗号或最后一行的]
            if line.endswith(','):
                line = line[:-1]
            elif line.endswith(']'):
                line = line[:-1].strip()
                if not line:
                    continue
            try:
                data.append(json.loads(line))
            except json.JSONDecodeError as err:
                print(f"第{idx+1}行解析失败: {err}")
                continue
    return pd.DataFrame(data)

3. 排查索引越界的细节

  • 删掉所有手动拆分JSON字符串的代码(比如split(',')),必须用json.loads()解析完整JSON对象。
  • 读取文件时指定编码utf-8,避免乱码导致解析结果随机错误。
  • 确保每次读取文件都用with语句自动关闭,避免文件指针残留导致读取位置错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:40:31