从jq生成表格输出

时间:2020-08-19 12:02:53

标签: json jq

我有一个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 

1 个答案:

答案 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(" ")

jqplay - Demo