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

问询:批量读取含JSON数组的文件并提取单个JSON至数组的高效方案

高效批量读取JSON文件并合并对象数组

针对你这个批量处理JSON文件的需求,我来分享几个实用且高效的实现思路,分不同编程语言场景来说,你可以根据自己的技术栈选择:

Python实现方案

Python处理这类文件批量操作场景非常顺手,而且有几个关键点能保证效率:

  • 避免一次性加载所有文件到内存:如果文件数量多、体积大,逐文件处理+按需解析会更省内存
  • 优先用内置json模块:比第三方库更轻量且性能稳定

基础代码示例

import json
import os

def merge_json_objects(directory):
    combined_objects = []
    # 遍历目录下符合命名规则的文件
    for filename in os.listdir(directory):
        if filename.startswith("FILE") and filename.endswith(".json"):
            file_path = os.path.join(directory, filename)
            with open(file_path, 'r', encoding='utf-8') as f:
                # 文件体积不大时,直接加载整个数组是最简洁的方式
                json_array = json.load(f)
                combined_objects.extend(json_array)
                # 如果文件特别大,推荐用流式遍历(内存友好):
                # for obj in json.load(f):
                #     combined_objects.append(obj)
    return combined_objects

# 调用示例
result = merge_json_objects("/path/to/your/target/directory")
print(f"总共合并了{len(result)}个JSON对象")

进阶优化点

  • 精准匹配文件名:如果文件名严格是FILE[A-Z].json格式,可以用正则re.match(r'^FILE[A-Z]\.json$', filename)来过滤,避免误读其他JSON文件
  • 多进程加速:如果文件数量极多(比如上千个),可以用multiprocessing模块并行读取,注意控制进程数避免IO过载,最后再汇总结果
  • 内存敏感场景处理:如果最终合并后的数组也很大,没必要全存在内存里,可以边读边写入输出文件:
def merge_to_output_file(input_dir, output_path):
    with open(output_path, 'w', encoding='utf-8') as out_f:
        out_f.write('[')
        first_obj = True
        for filename in os.listdir(input_dir):
            if filename.startswith("FILE") and filename.endswith(".json"):
                file_path = os.path.join(input_dir, filename)
                with open(file_path, 'r', encoding='utf-8') as in_f:
                    json_array = json.load(in_f)
                    for obj in json_array:
                        if not first_obj:
                            out_f.write(',')
                        json.dump(obj, out_f)
                        first_obj = False
        out_f.write(']')

Node.js实现方案

如果是Node.js环境,利用其异步IO特性,处理大量文件也很高效:

基础代码示例

const fs = require('fs').promises;
const path = require('path');

async function mergeJsonObjects(directory) {
    const combined = [];
    const files = await fs.readdir(directory);
    
    for (const file of files) {
        if (file.startsWith('FILE') && file.endsWith('.json')) {
            const filePath = path.join(directory, file);
            const content = await fs.readFile(filePath, 'utf8');
            const jsonArray = JSON.parse(content);
            combined.push(...jsonArray);
        }
    }
    
    return combined;
}

// 调用示例
mergeJsonObjects('/path/to/your/target/directory')
    .then(result => console.log(`总共合并了${result.length}个JSON对象`))
    .catch(err => console.error('处理出错:', err));

进阶优化点

  • 流式解析大文件:如果单个JSON文件体积极大,可以用stream-json这类库做流式解析,避免一次性加载整个文件到内存
  • 可控并行处理:用Promise.all同时读取多个文件,但要控制并发数(比如一次处理10个),避免系统IO压力过大

通用高效原则

不管用哪种语言,这些原则都能帮你提升处理效率:

  • 精准过滤文件:只处理符合命名规则的文件,减少不必要的IO操作
  • 避免重复解析:每个文件只读取解析一次,不要反复操作
  • 内存优先控制:数据量极大时,优先考虑边读边写输出,而非全量存在内存中
  • 依赖原生工具:尽量用语言内置的JSON解析工具,比第三方库更高效稳定

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:06:59