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

求助:Python中等价于jq命令的多JSON文件云VM名称提取方法

在Python中遍历多个JSON文件的cis数组提取cloud_vm_display_name字段

核心问题解决

你写的data1['cis'][]是错误语法,Python里遍历数组得用for循环迭代元素,不能照搬jq的写法。下面是具体实现方案:

1. 处理单个JSON文件

先看单个文件的处理逻辑,加载JSON后遍历cis数组,提取目标字段并过滤null值:

import json

# 加载单个JSON文件
with open('example.json', 'r') as f:
    data = json.load(f)

# 遍历cis数组,提取目标字段
for item in data.get('cis', []):
    vm_name = item.get('properties', {}).get('cloud_vm_display_name')
    if vm_name is not None:  # 过滤null值
        print(vm_name)

用get()方法能避免字段不存在时抛出KeyError,哪怕cis或properties不存在,代码也不会报错。

2. 批量处理多个JSON文件

要处理目录下所有JSON文件,用glob模块批量匹配文件逐个处理:

import json
import glob

# 匹配当前目录下所有.json文件
json_files = glob.glob('*.json')

for file_path in json_files:
    with open(file_path, 'r') as f:
        try:
            data = json.load(f)
            # 遍历cis数组
            for item in data.get('cis', []):
                vm_name = item.get('properties', {}).get('cloud_vm_display_name')
                if vm_name is not None:
                    print(vm_name)
        except json.JSONDecodeError:
            print(f"跳过无效JSON文件: {file_path}")

这段代码会自动遍历所有JSON文件,跳过解析失败的文件,同时过滤掉cloud_vm_display_name为null的结果,和你之前用jq命令的效果完全一致。

关键说明

  • Python没有data['cis'][]这种语法,必须用for item in data['cis']迭代数组元素
  • 使用dict.get(key, 默认值)可以安全访问嵌套字段,避免因字段缺失导致程序崩溃
  • 加入try-except块处理无效JSON文件,提升代码健壮性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 19:22:41