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

Python如何处理超大JSON文件?Object365数据集5.5MB标注文件读取问题咨询

Python处理JSON文件的常见问题和解决方案

5.5MB的JSON对于Python来说属于极小体积的文件,完全不需要特殊的大文件处理逻辑,加载失败是代码逻辑或配置错误导致,常见原因如下:

  • 路径配置错误:inputJsonFile参数传入的路径不存在、拼写错误,Windows系统下路径未加r前缀导致转义字符识别异常,程序在路径校验阶段就抛出异常,没有执行到后续打印逻辑
  • 第一个代码的readFileLine函数逻辑错误:f.readline()仅会读取文件的第一行内容,如果你拿到的Object365标注JSON是格式化后的多行存储结构,仅读取第一行根本无法拿到完整的JSON结构,会直接解析失败
  • 输出缓冲问题:Python的print函数默认是行缓冲,如果输出内容没有换行或者程序提前崩溃,打印内容可能留在缓冲里没有输出到控制台,给print加flush=True参数可以强制刷新输出

5.5MB小体积JSON的正确加载代码

import json
from pathlib import Path

def ob365_converter(inputJsonFile, datasetPath):
    input_path = Path(inputJsonFile)
    # 路径校验不通过直接抛出明确错误
    if not input_path.is_file():
        raise FileNotFoundError(f"标注文件不存在,绝对路径为:{input_path.absolute()}")
    print("开始加载JSON文件", flush=True)
    with open(input_path, "r", encoding="utf-8") as f:
        dataset_json = json.load(f)
    print("JSON加载完成,共包含{}条标注".format(len(dataset_json["annotations"])), flush=True)
    for item in dataset_json["annotations"]:
        # 你的标注处理逻辑
        pass

如果运行时报编码错误,给open函数添加errors="ignore"参数即可。

超大JSON文件(>1GB,无法一次性加载进内存)的处理方案

如果你后续遇到更大体积的JSON文件,不需要一次性加载全量内容,可以用流式解析库ijson逐元素读取,内存占用仅和单条数据的大小有关:

  • 安装依赖:pip install ijson
  • 示例代码:
import ijson

def stream_load_ob365(inputJsonFile):
    with open(inputJsonFile, "r", encoding="utf-8") as f:
        # 流式迭代读取annotations数组下的所有元素
        for annotation in ijson.items(f, "annotations.item"):
            # 直接处理单条标注
            pass

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:06:02