You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JQ向指定user对应的videos数组中插入JSON元素

正确使用JQ向指定用户的videos数组添加元素

原始JSON数据

[
  {
    "user":"user-1",
    "videos":[
      {
        "key":"key1",
        "url":"url1"
      }
    ]
  },
  {
    "user":"user-2",
    "videos":[
      {
        "key":"key2",
        "url":"url2"
      }
    ]
  }
]

需求

向"user":"user-2"对应的videos数组中添加{"key":"key3","url":"url3"},最终目标结构如下(注:示例结果中url字段改为title,实际操作可按需调整字段名):

[
  {
    "user":"user-1",
    "videos":[
      {
        "key":"key1",
        "title":"title1"
      }
    ]
  },
  {
    "user":"user-2",
    "videos":[
      {
        "key":"key2",
        "title":"title2"
      },
      {
        "key":"key3",
        "title":"title3"
      }
    ]
  }
]

错误命令分析

你之前使用的命令:

jq '. += [{"user":"user-2","videos":[{"key":"key3","title":"title3"}]}]'

会直接向顶层数组追加一个全新的user-2对象,而非修改原有对象的videos数组,不符合需求。

正确JQ命令

方法1:遍历数组精准修改

jq 'map(if .user == "user-2" then .videos += [{"key":"key3","url":"url3"}] else . end)'

方法2:直接定位目标对象(效率更高)

jq '(.[] | select(.user == "user-2").videos) += [{"key":"key3","url":"url3"}]'

命令说明

  • 方法1通过map遍历顶层数组的每个对象,判断对象的user字段是否为user-2,若是则对其videos数组执行追加操作(+=),其余对象保持原样返回。
  • 方法2先通过select筛选出user-2的对象,直接定位到它的videos数组执行追加,无需遍历所有元素,处理大数组时效率更高。

内容的提问来源于stack exchange,提问作者ClassyUnderexposure

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 19:36:03