我的JSON输入:
{ "Key": "Team", "Value": "AA" }
{ "Key": "Division", "Value": "BB" }
期望的输出:
[
{ "Key": "Team", "Value": "AA" },
{ "Key": "Division", "Value": "BB" }
]
我无法使用--slurp
选项,因为我处于复杂jq代码的中间位置。
上述输入是我的函数的结果,我需要将其转换为数组以进行进一步处理。
FAQ中推荐的解决方案:https://github.com/stedolan/jq/wiki/FAQ#general-questions
cat json | jq 'reduce . as $i ([]; . + [$i])'
产生不同的东西:
[
{ "Key": "Team", "Value": "AA" }
]
[
{ "Key": "Division", "Value": "BB" }
]
答案 0 :(得分:2)
我认为你需要的只是使用jq数组构造函数语法。即包含您在一对[ ]
这是一个例子。为了论证,我将使用一个函数代替你所拥有的复杂表达式。 e.g。
def some_complex_expression:
{ "Key": "Team", "Value": "AA" },
{ "Key": "Division", "Value": "BB" }
;
如果我们只是执行这个表达式
some_complex_expression
结果是我们期望的两个对象的流:
{
"Key": "Team",
"Value": "AA"
}
{
"Key": "Division",
"Value": "BB"
}
但是如果我们将表达式括在[ ]
[ some_complex_expression ]
结果是包含流
中对象的单个数组[
{
"Key": "Team",
"Value": "AA"
},
{
"Key": "Division",
"Value": "BB"
}
]
答案 1 :(得分:0)
如果您的输入确实是一个不可挽回的流,并且如果您不能使用slurp选项,那么最简单的可能是使用jq 1.5的inputs
过滤器,其行如下:
jq -n '[inputs]'
如果不使用-n选项,则inputs
将不会看到第一个JSON实体。如果您不能使用-n选项,请使用[., inputs]