jq 查询将嵌套的 json 转换为 csv

问题描述 投票:0回答:2

我是 jq 的新手,尝试处理嵌套的 json 文件并将其转换为 csv 格式。示例嵌套 json 文件由以下三个级别组成:

{
level1-label: {
    level2-text1 : {
        level3-label1: value1,
        level3-label2: value2,
        level3-label3: value3
    },
    level2-text2 : {
        level3-label1: value4,
        level3-label2: value5,
        level3-label3: value6
    }
}
}

期望的输出

level2, level3-label1, level3-label2, level3-lable3

level2-text1, value1, value2, value3
level2-text2, value4, value5, value6

研究了好几个小时,似乎函数“to_entries”可能是正确的解决方案。我终于可以想出两个查询来将 level2 和 level3 数据作为数组处理,但无法更进一步。

查询只包含 level2 键的数组结果

jq -r ".level1-label | to_entries | map([.key])" input.json

查询只包含 level3 键和值的数组结果

jq -r ".level1-label | to_entries | map(.value)" input.json

请告知结合上述查询或其他解决方案的方向。

json jq export-to-csv
2个回答
0
投票

使用 | (管道)运算符将一个命令的输出作为输入传递给另一个命令。你需要这个来组合这两个查询:

jq -r '.["level1-label"] | to_entries[] | [.key] + (.value | to_entries[] | [.key, .value]) | @csv' input.json

0
投票

您可以使用

to_entries
访问
.key
,同时遍历
.value
下的值,将所有内容收集到一个新数组
[…]
中,并让
@csv
从中创建CSV格式:

jq -r '."level1-label" | to_entries[] | [.key, .value[]] | @csv' input.json
"level2-text1","value1","value2","value3"
"level2-text2","value4","value5","value6"
© www.soinside.com 2019 - 2024. All rights reserved.