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

Python合并多个同结构JSON并提取各字段非None值的实现方法

同构JSON文件合并方案

你描述的场景下,每个字段全局仅存在一个非"None"有效值,用生成器+字典推导的写法比手动zip遍历更简洁,Python实现如下:

import json
from pathlib import Path

# 读取所有待合并的JSON文件
json_file_list = list(Path("你的JSON文件存储目录路径").glob("*.json"))
json_obj_list = []
for fp in json_file_list:
    with open(fp, "r", encoding="utf-8") as f:
        json_obj_list.append(json.load(f))

# 平级JSON结构核心合并逻辑(一行完成)
merged_result = {
    key: next(val for val in (obj[key] for obj in json_obj_list) if val != "None")
    for key in json_obj_list[0].keys()
}

# 如需兼容任意深度的同构嵌套JSON,替换为递归实现即可
# def recursive_merge(obj_seq):
#     if isinstance(obj_seq[0], dict):
#         return {
#             k: recursive_merge([obj[k] for obj in obj_seq])
#             for k in obj_seq[0].keys()
#         }
#     # 叶子节点直接取非"None"值
#     return next(v for v in obj_seq if v != "None")
# merged_result = recursive_merge(json_obj_list)

# 输出合并结果
with open("merged_output.json", "w", encoding="utf-8") as f:
    json.dump(merged_result, f, ensure_ascii=False, indent=2)

方案优势

  • 代码简洁:平级场景核心逻辑仅需一行字典推导即可完成
  • 执行效率高:每个字段找到第一个非"None"值就终止遍历,无需遍历所有N个文件的对应字段
  • 扩展性强:递归版本支持任意深度的同构嵌套JSON结构,无需手动调整层级处理逻辑

注:如果你场景中的"None"是Python原生None类型而非字符串,把判断条件改为if v is not None即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:48:03