如何从目录中多个YAML文件提取指定节点生成单个JSON
解决方案
实现思路
- 定义需要提取的目标节点集合
- 改造YAML读取逻辑,返回加载的数据而非仅打印
- 遍历所有YAML文件,逐个提取目标节点数据并汇总
- 将汇总数据写入单个JSON文件
完整代码
import yaml import glob import json # 替换为你实际需要提取的节点名称 TARGET_NODES = ["node_a", "node_b", "node_c"] # Windows路径使用原始字符串避免转义问题 yaml_files = glob.glob(r"C:\Users\test\*.yaml") def load_yaml(filename): try: with open(filename, 'r', encoding='utf-8') as f: return yaml.safe_load(f) except yaml.YAMLError as e: print(f"Failed to parse {filename}: {str(e)}") return None # 存储所有提取后的条目 combined_results = [] for file_path in yaml_files: data = load_yaml(file_path) if not data: continue # 提取目标节点,不存在的节点返回None(可按需调整) extracted_entry = {key: data.get(key) for key in TARGET_NODES} combined_results.append(extracted_entry) # 写入合并后的JSON文件 with open("combined_output.json", 'w', encoding='utf-8') as outfile: json.dump(combined_results, outfile, ensure_ascii=False, indent=4) print("Combined JSON file generated successfully.")
关键注意事项
- 目标节点配置:修改
TARGET_NODES列表为你需要提取的节点名称 - 路径处理:Windows路径务必使用原始字符串(前缀
r)或双反斜杠,防止转义字符干扰 - 容错处理:读取YAML失败的文件会被跳过,避免整个流程中断
- JSON格式:
ensure_ascii=False保留中文等非ASCII字符,indent=4生成格式化的可读JSON - 节点缺失处理:使用
dict.get()方法避免因节点不存在抛出KeyError,若需要跳过缺失关键节点的文件,可添加额外判断逻辑
内容的提问来源于stack exchange,提问作者Anu Shivangi
相关产品推荐
相关产品推荐

