【问题标题】:Changing array of numbers into array of objects jq将数字数组更改为对象数组 jq
【发布时间】:2021-07-02 06:42:44
【问题描述】:

我对 JSON 和 jq 完全陌生,所以这似乎是一个简单的问题。 我想将一个数字数组更改为一个对象数组,每个值(数字)都有一个键。

假设我有一个这样的 JSON 文件:

{
"foo": [1519739200, 1519739600, 1519740000]
}

那么我想要的输出是:

{
"foo": [
    {
       "id": 1519739200
    },
    {
       "id": 1519739600
    },
    {
       "id": 1519740000
    },
  ]
}

到目前为止,我所看到的一切都与向现有对象添加具有值的新键或将两个数组合并为几个对象有关。我知道我可以将更多键添加到已经存在的对象中,但是如何将键添加到数组中?我假设我必须先将数组元素更改为对象,但我该怎么做呢? 谢谢你的回答。

【问题讨论】:

    标签: arrays json object jq


    【解决方案1】:

    检查一下,

    https://jqplay.org/s/xF9DyVbhXD

    { foo : [ { id : .foo[] } ] }
    

    【讨论】:

      【解决方案2】:

      有几种方法可以解决。

      首先您要为 foo 中的每个项目创建一个新对象:

      $ jq -c '{ id: .foo[] }'
      {"id":1519739200}
      {"id":1519739600}
      {"id":1519740000}
      

      然后您可以重建您拥有的“形状” - 首先使用[ ... ]

      $ jq -c '[ { id: .foo[] } ]' 
      [{"id":1519739200},{"id":1519739600},{"id":1519740000}]
      

      然后{ foo: }

      $ jq -c '{ foo: [ { id: .foo[] } ] }' 
      {"foo":[{"id":1519739200},{"id":1519739600},{"id":1519740000}]}
      

      另一种选择是使用|= 直接修改/更新.foo

      $ jq -c '.foo |= [{id: .[]}]' 
      {"foo":[{"id":1519739200},{"id":1519739600},{"id":1519740000}]}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 1970-01-01
        相关资源
        最近更新 更多