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
相关产品推荐
相关产品推荐

