【问题标题】:jq add element to each object inside array of objectsjq将元素添加到对象数组中的每个对象
【发布时间】:2021-05-13 07:37:03
【问题描述】:

如果我有一个这样的对象数组:

[
    {
        "remote" : [
            {
                "id" : 1
            },
            {
                "id" : 2
            },
            {
            "   id" : 3
            }
        ],
        "text_id" : 1
        },
    {
        "remote" : [
            {
                "id" : 4
            },
            {
                "id" : 5
            },
            {
                "id" : 6
            }
        ],
        "text_id" : 2
    }
]

如何将“text_id”字段添加到 .[].remote[] 数组中的每个对象,使其变为

[
    {
        "remote" : [
            {
                "id" : 1,
                "text_id" : 1
            },
            {
                "id" : 2,
                "text_id" : 1
            },
            {
            "   id" : 3,
                "text_id" : 1
            }
        ]
        },
    {
        "remote" : [
            {
                "id" : 4,
                "text_id" : 2
            },
            {
                "id" : 5,
                "text_id" : 2
            },
            {
                "id" : 6,
                "text_id" : 2
            }
        ]
    }
]

我已经花了几个小时试图弄清楚这一点。看起来必须有一种方法可以使用 foreach 指令来做到这一点,但是在我检查了手册之后,在我看来它很晦涩,所以我想也许有人可以举个例子。 谢谢。

【问题讨论】:

    标签: json jq


    【解决方案1】:
    jq 'map( .text_id as $t
             | .remote |= map( . + {text_id : $t} )
             | del(.text_id)
        )'
    

    【讨论】:

      【解决方案2】:

      你不需要map

      .[] |= (.remote[] += {text_id} | del(.text_id))
      

      Online demo

      【讨论】:

      • 谢谢,您的回答看起来更短,虽然我使用了 jq '.[] | {remote, text_id} | .remote[] + {text_id}' json.log 最后,但它的灵感来自你的版本=)似乎我在组合对象时把那些该死的点搞砸了,因为我试图这样做,只得到 jq 的错误消息,根本没有帮助。
      • @krop 好。 .[] | .remote[] + {text_id} 会做同样的事情。
      【解决方案3】:

      我认为你应该使用 array.map() 您有两个级别的数组,因此它应该如下所示:

      const fatArray = [
          {
              remote : [
                  {
                      id : 1
                  },
                  {
                      id : 2
                  },
                  {
                      id : 3
                  }
              ],
              text_id : 1
              },
          {
              remote : [
                  {
                      id : 4
                  },
                  {
                      id : 5
                  },
                  {
                      id : 6
                  }
              ],
              text_id : 2
          }
      ];
      const finalArray = fatArray.map( arr => {
        return arr.remote.map(elem => { return {text_id: arr.text_id, id: elem.id}})
      }
      )
      console.log(finalArray);

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多