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

