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

如何用Python循环加载并合并n个JSON文件?

合并多个JSON文件的通用实现及错误修复

问题原因分析

你的代码出现TypeError: str, bytes or os.PathLike object, not Tuple及逻辑问题,主要原因有这几点:

  • 语法错误:loadjson函数定义末尾缺少冒号,违反Python语法规则。
  • 参数传递错误:循环中调用loadjson(file)时,file是函数接收的所有文件路径组成的元组,而非当前循环的单个文件路径,导致open()函数接收到非字符串类型的参数,触发类型错误。
  • 合并逻辑失效:result = {**json_data}会每次用新加载的JSON数据完全覆盖之前的结果,没有实现合并效果。
  • 调用缩进错误:merge_JsonFiles(file1, file2, file3)被缩进在函数内部,永远不会被执行。

修正后的通用实现代码

import json

def loadjson(file_path):
    # 加载单个JSON文件,返回字典格式数据
    with open(file_path, 'r', encoding='utf-8') as fh:
        return json.load(fh)

def merge_JsonFiles(*file_paths):
    merged_dict = {}
    for path in file_paths:
        json_data = loadjson(path)
        # 将当前JSON数据合并到结果字典,重复键会被新值覆盖
        merged_dict.update(json_data)
    return merged_dict

# 调用示例(替换为你的实际文件路径)
if __name__ == "__main__":
    file1 = "data1.json"
    file2 = "data2.json"
    file3 = "data3.json"
    final_result = merge_JsonFiles(file1, file2, file3)
    print(final_result)

扩展:保留重复键的多值合并

如果需要保留相同键的所有值(比如把重复键的内容合并为列表),可以修改合并逻辑:

def merge_JsonFiles(*file_paths):
    merged_dict = {}
    for path in file_paths:
        json_data = loadjson(path)
        for key, value in json_data.items():
            if key in merged_dict:
                # 若键已存在,将旧值转为列表并追加新值
                if not isinstance(merged_dict[key], list):
                    merged_dict[key] = [merged_dict[key]]
                merged_dict[key].append(value)
            else:
                merged_dict[key] = value
    return merged_dict

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 22:25:08