如果缺少jq键,则返回空字符串或0(零)

时间:2018-10-22 08:51:56

标签: json jq

我的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结构示例,现在实际问题已经改变了一点。消息已更新。

1 个答案:

答案 0 :(得分:1)

您可以通过添加来调整管道

map(. // 0)

在形成数组之后。如果您想保留false,则必须添加

map(if . == null then 0 else . end)

相反。

如果您想要一个与键名无关的解决方案,则可以使用以下方式:

def resize($n): [range(0;$n) as $i | .[$i] // 0];

这将截断或扩展输入数组。如果您不想截断,请进行相应的调整。