按照下面的示例,我有一个层次结构的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可以这样做吗?
答案 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工具的创建者