我有一个json文件,我需要从中提取一些数据。
{
"Volumes": [
{
"Attachments": [],
"Encrypted": true,
"Size": 100,
"SnapshotId": "",
"State": "available",
"Tags": [
{
"Key": "Name",
"Value": "kubernetes-dynamic-pvc-claim1"
},
{
"Key": "kubernetes.io/created-for/pv/name",
"Value": "pvc-claim1"
}
],
"VolumeType": "io1",
"MultiAttachEnabled": false
},
{
"Attachments": [],
"Encrypted": true,
"Size": 200,
"SnapshotId": "",
"State": "available",
"Tags": [
{
"Key": "kubernetes.io/created-for/pv/name",
"Value": "pvc-claim2"
},
{
"Key": "Name",
"Value": "kubernetes-dynamic-pvc-claim2"
}
],
"VolumeType": "gp2",
"MultiAttachEnabled": false
}
]
}
我想提取标签值,其键为名称:例如:
我只想获取kubernetes-dynamic-pvc-claim1和kubernetes-dynamic-pvc-claim2。
我想要类似的结果
kubernetes-dynamic-pvc-claim1
kubernetes-dynamic-pvc-claim2
我该怎么做?我一直在努力与jq并尝试过类似的事情;
'jq -r .'Volumes[].Tags[0].Value'
但这并没有给我预期的结果。
另外,如何获得尺寸和VOlumetype如下所示的输出?
我想要类似的结果
kubernetes-dynamic-pvc-claim1 100 io1
kubernetes-dynamic-pvc-claim2 200 gp2
答案 0 :(得分:1)
在遍历JSON时将值存储在适当的变量中,并将最终结果放入数组中。
使用jq
时,以-r/--raw-output
模式运行join(" ")
命令。您也可以改用@csv
或@tsv
,以CSV或TSV格式显示结果。
.Volumes[] |
.Size as $s |
.VolumeType as $v |
.Tags[] | select(.Key == "Name").Value as $k |
[$k, $s, $v] | join(" ")