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

使用gojsonq无法获取JSON嵌套disks数组,求解决方法

解决gojsonq解析嵌套disks数组字段的问题

直接使用disks.capacityGB无法提取嵌套数组字段的原因是:gojsonq默认不会自动遍历嵌套数组并提取指定字段,需要显式处理数组元素。以下是两种可行的解决方案:

方案一:使用Transform方法处理每个VM对象

通过Transform遍历每个虚拟机对象,手动提取disks数组中的capacityGB字段并添加到结果中:

result := jq_vm.From("data").
    Select("id", "name", "host_id").
    Transform(func(v interface{}) interface{} {
        vmMap := v.(map[string]interface{})
        disks := vmMap["disks"].([]interface{})
        capacityList := make([]interface{}, len(disks))
        
        for idx, disk := range disks {
            diskMap := disk.(map[string]interface{})
            capacityList[idx] = diskMap["capacityGB"]
        }
        
        vmMap["disks_capacityGB"] = capacityList
        return vmMap
    }).
    Get()

方案二:在Select中传入自定义提取函数

在Select方法中直接传入函数,针对每个VM对象提取磁盘容量列表:

result := jq_vm.From("data").
    Select(
        "id",
        "name",
        "host_id",
        func(m map[string]interface{}) interface{} {
            disks := m["disks"].([]interface{})
            capGBs := make([]interface{}, 0)
            
            for _, d := range disks {
                capGBs = append(capGBs, d.(map[string]interface{})["capacityGB"])
            }
            
            return map[string]interface{}{"disks.capacityGB": capGBs}
        },
    ).
    Get()

执行效果

处理后返回的结果会包含每个VM对应的磁盘容量列表,示例返回结构如下:

[
    map[
        host_id:host-12345 
        id:vm-12345 
        name:MyVirtualMachine 
        disks_capacityGB:[100 200]
    ],
    map[
        host_id:host-67890 
        id:vm-67890 
        name:TestVM 
        disks_capacityGB:[50]
    ]
]

内容的提问来源于stack exchange,提问作者Programming-Lover

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 02:20:54