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

如何使用jq在JSON对象的指定键后插入键值对?

如何使用jq在JSON对象的指定键后插入键值对?

先看你提供的JSON示例:

{
  "hierarchy": {
    "structure": {
      "card_11001": [ "addCard_4111" ],
      "container_11006": [ "mainContainer_11007", "subContainer_10016" ],
      "mainContainer_11007": [ "paymentMethodList_10001" ],
      "orderWrap_10012": [ "orderSummary_10005" ],
      "paymentMethodList_10001": [ "card_11001", "placeOrder_10013" ],
      "root_10000": [ "payNotice_11011", "payNotice_10020", "container_11006", "placeOrderResultAction_10004" ],
      "subContainer_10016": [ "orderWrap_10012", "footer_10014" ]
    }
  }
}

想要在指定键(比如card_11001)后面插入新的键值对?别担心,jq可以轻松实现,还能保留原有键的顺序,下面是具体方案:

核心思路:把对象转成键值对数组操作

jq默认处理对象时会按键名排序,但如果想精准在某个键后面插入,我们可以先把对象拆成{key: "...", value: "..."}格式的数组,完成插入后再转回对象。

示例:在card_11001后插入新键值对

比如要插入"newCard_11002": ["addNewCard_4112"],直接用这条命令即可:

jq '
.hierarchy.structure |= (
  to_entries
  | splice(index(.[] | select(.key == "card_11001")) + 1; 0; [{key: "newCard_11002", value: ["addNewCard_4112"]}])
  | from_entries
)
' input.json

我给你拆解下每一步的作用:

  1. .hierarchy.structure |= (...):锁定要修改的目标对象,将后面处理的结果重新赋值给它。
  2. to_entries:把structure里的键值对转换为数组格式,方便我们操作元素位置。
  3. index(.[] | select(.key == "card_11001")):找到card_11001这个键在数组中的索引位置。
  4. splice(索引+1; 0; [新元素]):在目标键的下一个位置插入新的键值对(splice的参数依次是:起始位置、要删除的元素数量、要插入的元素数组)。
  5. from_entries:把修改后的数组重新转换回对象结构。

更省心的写法:封装成函数

如果需要多次执行这类插入操作,不如把逻辑封装成jq函数,调用起来更简洁:

jq '
def insert_after(target_key, new_key, new_value):
  to_entries
  | splice(index(.[] | select(.key == target_key)) + 1; 0; [{key: new_key, value: new_value}])
  | from_entries;

# 调用函数,指定目标键、新键和对应的值
.hierarchy.structure |= insert_after("card_11001", "newCard_11002", ["addNewCard_4112"])
' input.json

额外提醒

  • 如果指定的目标键不存在,这个命令会自动把新键值对插到对象的末尾,不会报错。
  • 要是你不在乎键的顺序,只想快速添加键值对,直接赋值就行:.hierarchy.structure.newCard_11002 = ["addNewCard_4112"],不过这样新键会被jq按字母顺序排序后放置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:31:24