我是 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
请告知结合上述查询或其他解决方案的方向。
使用 | (管道)运算符将一个命令的输出作为输入传递给另一个命令。你需要这个来组合这两个查询:
jq -r '.["level1-label"] | to_entries[] | [.key] + (.value | to_entries[] | [.key, .value]) | @csv' input.json
您可以使用
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"