【问题标题】:How to convert a JSON object stream into an array with jq如何使用 jq 将 JSON 对象流转换为数组
【发布时间】:2015-06-06 21:55:40
【问题描述】:

我想用jq把一个json对象流放到一个json数组中,比如从

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

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

但是这行不通

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

自从我得到

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

【问题讨论】:

    标签: json jq


    【解决方案1】:

    使用-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 你可以flatten 啜饮输入jq -s 'flatten'。或者更好的是,遍历每个输入 jq -n '[inputs[]]'
    • flatten 是我需要的提示。但我首先必须理解这个概念,jq 不只是读取 one JSON 实体,而是接受它们的“流”。有了这个我理解了-s,我理解了flatten。 :-)
    猜你喜欢
    • 2022-10-07
    • 2023-01-24
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多