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

如何使用jq为JSON中任意位置的指定对象结构添加键值对?

使用jq为JSON中所有"food"对象添加键值对

问题场景

现有如下JSON数据:

{
  "lunch": {
    "time": "11 am",
    "food": {
      "is_pizza": true
    }
  },
  "snacks": [
    {
      "time": "2 pm",
      "food": {
        "is_pizza": true
      }
    },
    {
      "time": "3:30 pm",
      "food": {
        "is_pizza": true
      }
    }
  ],
  "dinner": {
    "time": "6 pm",
    "food": {
      "is_pizza": true
    }
  }
}

需要遍历整个JSON结构,在所有包含"food"键的对象中,为对应的food子对象添加键值对"extra_cheese": true。

解决方案

使用jq的walk函数递归遍历JSON结构,配合条件判断即可实现需求:

jq 'walk(if type == "object" and has("food") then .food += {"extra_cheese": true} else . end)' input.json

命令解释

  • walk(...):递归遍历JSON的每一个元素,对每个元素执行括号内的逻辑
  • if type == "object" and has("food"):判断当前元素是否是对象且包含food键
  • .food += {"extra_cheese": true}:满足条件时,给food对象添加指定键值对
  • else . end:不满足条件的元素保持原样

执行命令后,将得到目标结果:

{
  "lunch": {
    "time": "11 am",
    "food": {
      "is_pizza": true,
      "extra_cheese": true
    }
  },
  "snacks": [
    {
      "time": "2 pm",
      "food": {
        "is_pizza": true,
        "extra_cheese": true
      }
    },
    {
      "time": "3:30 pm",
      "food": {
        "is_pizza": true,
        "extra_cheese": true
      }
    }
  ],
  "dinner": {
    "time": "6 pm",
    "food": {
      "is_pizza": true,
      "extra_cheese": true
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:52:39