我尝试过在Linux cmd行上使用jq将json转换为csv,但没有成功。如有任何指导帮助,将不胜感激。
{
"dir/file1.txt": [
{
"Setting": {
"SettingA": "",
"SettingB": null
},
"Rule": "Rulechecker.Rule15",
"Description": "",
"Line": 11,
"Link": "www.sample.com",
"Message": "Some message",
"Severity": "error",
"Span": [
1,
3
],
"Match": "[id"
},
{
"Setting": {
"SettingA": "",
"SettingB": null
},
"Check": "Rulechecker.Rule16",
"Description": "",
"Line": 27,
"Link": "www.sample.com",
"Message": "Fix the rule",
"Severity": "error",
"Span": [
1,
3
],
"Match": "[id"
}
],
"dir/file2.txt": [
{
"Setting": {
"SettingA": "",
"SettingB": null
},
"Rule": "Rulechecker.Rule17",
"Description": "",
"Line": 51,
"Link": "www.example.com",
"Message": "Fix anoher 'rule'?",
"Severity": "error",
"Span": [
1,
18
],
"Match": "[source,terminal]\n----\n"
}
]
}
最后,我希望将dir/file1.txt、dir/file2.txt作为行显示在矩阵的左侧,将所有键作为列标题显示,并显示相应的值。
| Filename | SettingA | SettingB | Rule | More columns... |
| -------- | -------------- | -------------- | -------------- | -------------- |
| dir/file1.txt | | null | Rulechecker.Rule15 | |
| dir/file1.txt | | null | Rulechecker.Rule16 | |
| dir/file2.txt | | null | Rulechecker.Rule17 | |
1条答案
按热度按时间mklgxw1f1#
迭代
to_entries
获得的顶级键值对以访问键名,然后再一次迭代.value
中的内容数组以获得数组项。还要注意,示例的最后一个.Match
值中出现的换行符不能按原样用于面向行的格式(如CSV)。这里,我选择使用gsub
将它们替换为字符串\n
。第一个
Demo
如果您只想按照值出现的顺序转储所有值,可以使用
.. | scalars
遍历文档的各个级别来简化此操作:第一个
Demo
至于列标题,对于第一种情况,我会手动添加它们,因为您无论如何都要拼写每个值路径。对于后一种情况,它会有点复杂,因为不是所有列都有直接名称(数组
Span
中的项应该被称为什么?),有些项似乎发生了变化(在第二条记录中,列Rule
被称为Check
)。但是,您可以沿用第一条记录的名称,并将最深的字段名称保留原样或添加数组索引。可以使用以下方法:第一个
Demo