求助:如何使用JQ将指定JSON数据提取为CSV格式?
使用JQ从JSON提取指定格式CSV的解决方案
没问题,我来帮你搞定这个JQ提取CSV的需求!先梳理下你的JSON结构:最外层是values数组,每个元素包含resourceId和嵌套的property-content列表,我们需要把资源ID和指定几个statKey对应的值按顺序拼接成CSV行。
最终可用的JQ命令
直接用这段命令就能得到你想要的结果:
.values[] | [ .resourceId, (.["property-contents"]["property-content"] | from_entries(.[] | {key: .statKey, value: .values[0]}) | [ "config|name", "summary|guest|ipAddress", "summary|parentCluster", "summary|parentDatacenter", "summary|parentVcenter", "summary|runtime|powerState" ] | map(.[.])) ] | flatten | @csv
命令拆解说明
我一步步给你解释这段代码的作用,方便你后续调整:
.values[]:遍历最外层values数组里的每个资源对象。.resourceId:先把资源ID作为CSV的第一列内容。- 处理
property-content部分:from_entries(.[] | {key: .statKey, value: .values[0]}):把每个statKey条目转换成键值对对象(因为你的示例里每个values只有一个元素,所以直接取第一个值)。- 指定
statKey顺序数组:这里列出了你需要的6个statKey,确保输出的CSV列顺序完全匹配你的期望。 map(.[.]):按指定顺序提取每个statKey对应的值,形成一个子数组。
flatten:把包含resourceId和子数组的嵌套数组展开成一维数组。@csv:把一维数组转换成标准CSV格式(自动处理字符串中的特殊字符,兼容性更好)。
测试结果
把你提供的示例JSON输入到这个命令中,输出结果为:
"xxxx-xxxx-xxx-8b16-xxxxxx","somebname.UNIVERSE.test.com","100.xx.5.xx","UFO-UFO","GALAXY-D123","X-RAY123","Powered On"
如果不需要引号包裹内容,可以把@csv换成join(","),不过@csv更符合通用CSV规范,适合后续工具解析。
内容的提问来源于stack exchange,提问作者Bond
相关产品推荐
相关产品推荐

