如何使用jq将JSON对象流转换为数组

39

我想使用jq将一串JSON对象放入一个JSON数组中,例如从

{"a":1}
{"b":2}

[{"a":1},
{"b":2}]

但这样做行不通。

echo '
{"a":1}
{"b":2}
'|jq '[.]'

自从我得到了

[
  {
    "a": 1
  }
]
[
  {
    "b": 2
  }
]
1个回答

45

使用-s选项将其全部读入。

$ jq -s '.' <<< '{ "a": 1 } { "b": 2 }'
[
  {
    "a": 1
  },
  {
    "b": 2
  }
]

作为另一种选择,使用inputs读取值是更加灵活的替代方案。通常需要与-n选项一起使用,以防止第一个值过早地被消耗。

$ jq -n '[inputs]' <<< '{ "a": 1 } { "b": 2 }'

我有一个稍微不同的问题。我的输入是数组 [{"a":1}][{"b":2}],结果应该是没有内部数组的,即 [{"a":1},{"b":2}]。有什么提示吗?似乎 jq 的一些概念仍然让我困惑。 - towi
2
@towi 你可以使用 flatten 命令来扁平化 slurped 输入,如: jq -s 'flatten'。或者更好的方法是遍历每个输入项,使用命令 jq -n '[inputs[]]' - Jeff Mercado
“flatten” 是我需要的提示。但是我首先必须理解这个概念,即 jq 不仅可以读取一个 JSON 实体,而且可以接受一个“流”。有了这个,我就理解了 -s,也就理解了 flatten。 :-) - towi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接