流式传输到阵列转换器,没有傻瓜

时间:2015-10-04 17:46:26

标签: json jq

我的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" }
]

2 个答案:

答案 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]