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

Python中json.loads导入数据是否存在大小限制?355MB文件加载报错

解决大JSON文件导入Python时的报错问题

嘿,我来帮你搞定这个导入大JSON的麻烦!你用json.loads(open('Myfile.json').read())的方式处理355MB的文件,很容易触发内存不足的问题,而且报错信息没显示全,也有可能是JSON本身存在格式错误。下面给你几个实用的解决方案:

1. 改用流式解析,避免一次性加载整个文件

直接把超大文件读成字符串会占满内存,咱们换个思路,逐段解析JSON,不用一次性加载全部内容。用Python标准库的json.JSONDecoder.raw_decode()就能实现:

import json

def stream_large_json(file_path):
    decoder = json.JSONDecoder()
    with open(file_path, 'r') as f:
        buffer = ''
        for line in f:
            buffer += line.strip()
            try:
                # 尝试解析当前缓存的内容
                result, parse_end = decoder.raw_decode(buffer)
                yield result
                # 把已经解析过的部分从缓存里去掉
                buffer = buffer[parse_end:]
            except ValueError:
                # 缓存内容不够完整,继续读下一行
                continue

# 把解析结果转成列表(如果是单个大对象,这个方法也能逐步加载)
CATALOG = list(stream_large_json('Myfile.json'))

这个方法的内存占用会低很多,适合处理几百MB级别的JSON文件。

2. 先检查JSON格式是否正确

你的报错信息截断了,很可能是JSON文件本身有格式问题,比如引号不匹配、逗号缺失或者括号没闭合。可以先读取一小部分内容测试:

import json

with open('Myfile.json', 'r') as f:
    # 先读取前10KB内容测试格式
    test_content = f.read(10000)
try:
    json.loads(test_content)
    print("前10KB的JSON格式没问题哦")
except ValueError as e:
    print(f"发现格式错误:{e},错误位置大概在第{e.args[1]}位")

如果小范围测试没问题,再看是不是整个文件的末尾有格式问题。

3. 用更高效的内存读取方式

哪怕你还是想一次性加载,也别用open().read()再转json.loads(),直接用json.load()从文件对象读取,它的内存效率更高:

import json

with open('Myfile.json', 'r') as f:
    CATALOG = json.load(f)

不过这个方法对于355MB的文件,还是有可能出现内存不足的情况,优先推荐流式解析的方案。

如果你的JSON是一个包含大量独立对象的数组,也可以试试第三方库ijson,它专门用来流式解析大JSON,安装后用起来很方便,不过如果不想额外装库,上面的标准库方法完全够用啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:11:59