如何将三个JSON文件合并为一个?(PHP及其他语言方案)
合并JSON文件并合并指定数组的解决方案
看起来你现在的问题是,原来的代码只是把每个JSON对象整体塞进了一个大数组里,而没有将相同键(比如strikers)下的数组合并到一起。我给你两种常用语言的解决方案,按你的需求按顺序合并,并且合并对应键的数组内容:
PHP 解决方案
这个方案支持任意数量的JSON文件,只需要在文件列表里添加即可,会自动合并相同键下的数组:
<?php // 按顺序列出要合并的JSON文件,添加第三个文件直接加在这里就行 $jsonFiles = ['1.json', '2.json', '3.json']; $mergedData = []; foreach ($jsonFiles as $file) { // 读取并解析JSON文件为关联数组 $content = file_get_contents($file); $data = json_decode($content, true); // 遍历当前JSON里的每一组键值对 foreach ($data as $key => $value) { // 如果值是数组,就合并到目标数组的对应键中 if (is_array($value)) { if (!isset($mergedData[$key])) { $mergedData[$key] = []; } $mergedData[$key] = array_merge($mergedData[$key], $value); } else { // 如果不是数组类型,后面的文件内容会覆盖前面的(可根据需求调整逻辑) $mergedData[$key] = $value; } } } // 输出格式化后的合并结果,方便阅读 echo json_encode($mergedData, JSON_PRETTY_PRINT); ?>
运行这段代码后,用你提供的两个JSON文件测试,会得到你期望的输出:
{ "strikers": [ { "name": "Narendran", "club": "Manchester United" }, { "name": "Kannan", "club": "Arsenal" } ] }
Python 解决方案
如果你更习惯用Python,也可以用下面的代码,逻辑和PHP一致:
import json # 按顺序定义要合并的JSON文件列表 json_files = ['1.json', '2.json', '3.json'] merged_data = {} for file_path in json_files: with open(file_path, 'r', encoding='utf-8') as f: data = json.load(f) for key, value in data.items(): # 合并数组类型的键值 if isinstance(value, list): if key not in merged_data: merged_data[key] = [] merged_data[key].extend(value) else: # 非数组类型,后续文件覆盖前面的 merged_data[key] = value # 输出格式化后的JSON结果 print(json.dumps(merged_data, indent=4))
补充说明
- 两种方案都支持按你指定的顺序合并文件
- 如果JSON里有非数组的键值对,后面的文件会覆盖前面的,如果你需要保留第一个或者做其他处理,可以修改对应逻辑
- 添加第三个JSON文件只需要在文件列表数组里追加文件名即可
内容的提问来源于stack exchange,提问作者Narendran Kannan
相关产品推荐
相关产品推荐

