Как мне преобразовать данные иерархического дерева JSON в двумерную таблицу, используя jq? - PullRequest
0 голосов
/ 25 июня 2019

У меня есть иерархическое дерево данных JSON в соответствии с приведенным ниже примером, и мне нужно преобразовать его в двухмерную таблицу в текстовом формате с семантикой объединения SQL.

Примечание: есть ответы на вопрос «Как преобразовать данные в двумерном массиве JSON в двумерную таблицу в текстовом формате», этот вопрос касается иерархических данных JSON, а не двумерных массивов.

Ввод 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 голосов
/ 01 июля 2019

в качестве альтернативного решения, вы можете рассмотреть возможность обработки иерархического json с помощью утилиты 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 - shell cli для операций JSON

0 голосов
/ 26 июня 2019

Разверните до «строк» ​​данных, затем выведите значения результатов.

$ 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
...