我遵循 json,
{
"A": {
"C": {
"D": "T1",
"E": 1
},
"F": {
"D": "T2",
"E": 2
}
},
"B": {
"C": {
"D": "T3",
"E": 3
}
}
}
我想将其转换为 csv,如下所示,
A,C,T1,1
A,F,T2,2
B,C,T3,3
输出描述:将打印父母的键,直到到达叶子孩子。当我到达 leaf child 时,打印它的值。
我尝试过关注但未能成功
猫 my.json | jq -r '(map(keys) | add | unique) as $cols |映射(.as $row | $cols | map($row[.])) as $rows | $行[] | @csv'
它给我一个错误。
我无法对父键进行硬编码,因为实际的 json 有太多记录。但是json的结构是类似的。我缺少什么?
有些要求不清楚,但以下解决了问题的一种解释:
paths as $path
| {path: $path, value: getpath($path)}
| select(.value|type == "object" )
| select( [.value[]][0] | type != "object")
| .path + ([.value[]])
| @csv
(该程序可以优化,但此处的演示旨在使单独的步骤变得清晰。)
调用:
jq -r -f leaves-to-csv.jq input.json
Output:
"A","C","T1",1
"A","F","T2",2
"B","C","T3",3
不带引号的字符串
为了避免字符串两边出现引号,您可以将上面管道的最后一个组件替换为:
join(",")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)