作者:殉情放开那只小兔子 | 来源:互联网 | 2023-09-23 20:01
篇首语:本文由编程笔记#小编为大家整理,主要介绍了csv格式的JQ查询输出相关的知识,希望对你有一定的参考价值。
我一直在尝试使用jq从下面的json文件中提取一个csv,但到目前为止还无法完成。请问这里有专家可以提供帮助吗?
{
"values": [
{
"resourceId": "xxxx-xxxx-xxx-8b16-xxxxxx",
"property-contents": {
"property-content": [
{ 
"statKey": "config|name",
"timestamps": [
1517591034069
],
"values": [
"somebname.UNIVERSE.test.com"
]
},
{ 
"statKey": "summary|guest|ipAddress",
"timestamps": [
1517591034069
],
"values": [
"100.xx.5.xx"
]
},
{ 
"statKey": "summary|parentCluster",
"timestamps": [
1551120506024
],
"values": [
"UFO-UFO"
]
},
{ 
"statKey": "summary|parentDatacenter",
"timestamps": [
1551120806021
],
"values": [
"GALAXY-D123"
]
},
{ 
"statKey": "summary|parentVcenter",
"timestamps": [
1517591334271
],
"values": [
"X-RAY123"
]
},
{ 
"statKey": "summary|runtime|powerState",
"timestamps": [
1517591034069
],
"values": [
"Powered On"
]
}
]
}
},
..
...
xxx-xxxx-xxx-8b16-xxxxxx,somebname.UNIVERSE.test.com,100.xx.5.xx,UFO-UFO,GALAXY-D123,X-RAY123,Powered On
预期输出/输出是:
xxx-xxxx-xxx-8b16-xxxxxx,somebname.UNIVERSE.test.com,100.xx.5.xx,UFO-UFO,GALAXY-D123,X-RAY123,Powered On
答案
您的预期输出使某些事情不清楚:
第二个CSV列包含somebname.UNIVERSE.test.com
,它大概是从"property-content": [ { ..., "values": [ "somebname.UNIVERSE.test.com" ], ... }
部分派生的。您如何确定要从"property-content"
列表中的第二列中选择哪个元素?是因为这是第一个要素吗?是因为它的"statKey": "config|name"
吗?
如果"property-content"
列表为空怎么办?如果没有您要查找的"statKey"
条目怎么办?如果"values"
列表中有零个或多个元素怎么办? CSV行只能包含一个标量值。同样的问题适用于后续的列。
在这里疯狂猜测,
$ jq -r '.values[] | [ .resourceId, (."property-contents"."property-content"[] | .values[]) ] | join(",")' your.json
xxxx-xxxx-xxx-8b16-xxxxxx,somebname.UNIVERSE.test.com,100.xx.5.xx,UFO-UFO,GALAXY-D123,X-RAY123,Powered On
我不能保证(并有些怀疑)这在一般情况下是可行的,但是我无法从您的一个示例中提取一般情况。