如何使用jq将JSON分层树数据转换为二维表?

时间:2019-06-25 12:31:21

标签: tree jq

按照下面的示例,我有一个层次结构的JSON数据树,我需要将其转换为具有SQL连接语义的文本格式的二维表。

注意:“如何将二维JSON数组中的数据转换为文本格式的二维表”问题有答案,此问题与分层JSON数据有关,而不是二维数组。 / em>

输入JSON:

[
    [
        [
            [
                "machine.example.com"
            ],
            [
                {
                    "VolumeId": "vol-070061259e62b931d",
                    "AttachTime": "2017-11-29T00:58:46.000Z",
                    "DeleteOnTermination": true,
                    "Status": "attached"
                },
                {
                    "VolumeId": "vol-070b6ecf34107389f",
                    "AttachTime": "2017-11-29T00:58:46.000Z",
                    "DeleteOnTermination": true,
                    "Status": "attached"
                },
                {
                    "VolumeId": "vol-0d6188182333509a2",
                    "AttachTime": "2017-11-29T01:30:51.000Z",
                    "DeleteOnTermination": false,
                    "Status": "attached"
                },
                {
                    "VolumeId": "vol-0653708f578c13e36",
                    "AttachTime": "2017-11-29T01:31:06.000Z",
                    "DeleteOnTermination": false,
                    "Status": "attached"
                }
            ]
        ]
    ]
]

所需的输出:

machine.example.com vol-070061259e62b931d
machine.example.com vol-070b6ecf34107389f
machine.example.com vol-0d6188182333509a2
machine.example.com vol-0653708f578c13e36

jq可以这样做吗?

2 个答案:

答案 0 :(得分:0)

深入数据的“行”,然后建立结果值。

$ jq -r '.[][] | "\(.[0][]) \(.[1][].VolumeId)"' input.json
machine.example.com vol-070061259e62b931d
machine.example.com vol-070b6ecf34107389f
machine.example.com vol-0d6188182333509a2
machine.example.com vol-0653708f578c13e36

答案 1 :(得分:0)

作为一种替代解决方案,您可以考虑使用基于步行路径的Unix实用程序 jtc 处理:

bash $ <file.json jtc -w'[0][0][0][0]<1>v[-2]<VolumeId>l:' -T'"{1} {}"' -qq
machine.example.com vol-070061259e62b931d
machine.example.com vol-070b6ecf34107389f
machine.example.com vol-0d6188182333509a2
machine.example.com vol-0653708f578c13e36
bash $ 

PS>披露:我是jtc-用于JSON操作的shell cli工具的创建者