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

如何使用JQ更新JSON环境数组的release字段,不存在则创建条目

使用jq更新/添加JSON环境条目问题

理想的JSON结构

{
    "environments":[
        {
            "name":"test",
            "release":"2.0"
        },
        {
            "name":"prod",
            "release":"1.0"
        }
    ]
}

目标文件可能的状态

  • 仅包含空对象{ }的空文件
  • 包含空的"environments"数组,例如{"environments": []}
  • "environments"数组已有部分条目,但无需要更新的环境

需求

针对指定环境,更新其release字段值;若该环境不存在,则创建对应的条目。

尝试过的命令

第一种命令:

(.environments[] | select(.name == "prod") | .release) = "3.0" // .environments += [{"name": "prod", "release": "3.0"}]

第二种命令:

.environments
|=  (map(.name) | index("prod")) as $ix
    | if $ix 
      then .[$ix]["release"] = "2.0" 
      else . + [{name: "release", value: "2.0"}]
      end

上述命令要么在处理空文件时失败,要么无法正确创建新条目。


解决方案

以下jq命令可处理所有场景(以更新prod环境的release为3.0为例):

简洁版命令

.environments = (
  .environments // []
  | (map(.name) | index("prod")) as $idx
  | if $idx then .[$idx].release = "3.0" else . + [{name: "prod", release: "3.0"}] end
)

命令说明

  1. .environments // []:处理空文件(此时.environments不存在)或已有空数组的情况,确保后续操作基于数组进行
  2. (map(.name) | index("prod")) as $idx:获取目标环境在数组中的索引,不存在则返回null
  3. 条件判断:
    • 若索引存在(环境已存在),则更新对应条目的release值
    • 若索引不存在,则向数组追加新的环境条目
  4. 最终赋值给.environments,确保生成正确的JSON结构

测试验证

  • 空文件{}执行后:生成{"environments": [{"name": "prod", "release": "3.0"}]}
  • 空数组{"environments": []}执行后:结果同上
  • 已有其他条目(如{"environments": [{"name": "test", "release": "2.0"}]})执行后:添加prod条目
  • 已有prod条目执行后:更新其release值为3.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:25:15