我的json转换为csv时遇到问题。
我有这种结构的json文件:
{
"key": [
{
"key1": 1,
"key2": 1,
"key3": {
"1": 1,
"2": 2,
"3": 3,
"4": 4
}
},
{
"key1": 2,
"key2": 2,
"key3": {
"2": 2
}
}
...
],
...
}
我正在使用此jq调用将json转换为csv:
bin\jq-win64 ".key[] | [.key1, .key2, .key3.\"1\", .key3.\"2\", .key3.\"3\", .key3.\"4\" ] | tostring] | join(\";\")" source.json > output.tmp
我不能使用标准的@csv
,因为它对我的语言环境设置不利。但是回到问题。在某些情况下,key3
可能不是完整的4元素对象(如示例中所示,4是键1/2/3/4的最大值)。我对那些丢失的子项有问题,因为jq返回“ null”,并且不适用于excel或calc中的CSV评估。在这种情况下是否有办法强制将空字符串或数字0作为输出?
最后,我可以尝试使用其他一些命令行文本处理器,但是如果我可以使用单个工具来做到这一点,我将感到非常高兴。
编辑: 我有错误的json结构示例,现在实际问题已经改变了一点。消息已更新。
答案 0 :(得分:1)
您可以通过添加来调整管道
map(. // 0)
在形成数组之后。如果您想保留false
,则必须添加
map(if . == null then 0 else . end)
相反。
如果您想要一个与键名无关的解决方案,则可以使用以下方式:
def resize($n): [range(0;$n) as $i | .[$i] // 0];
这将截断或扩展输入数组。如果您不想截断,请进行相应的调整。