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

如何将顶层Schedules属性值合并到Servers数组的每个项中?

用JQ合并顶层默认配置与服务器项内的自定义配置

需求说明

现有一份JSON配置,其中顶层的"Schedules"作为"Servers"数组中每个服务器项的默认调度配置,服务器项内的"Schedules"会覆盖默认配置的对应字段。需要将顶层默认配置与每个服务器项的自定义配置合并,用合并后的结果替换项内的"Schedules"。

示例输入JSON

{
    "Schedules": {
        "Days": [
            "Monday",
            "Tuesday",
            "Wednesday",
            "Thursday",
            "Friday",
            "Saturday",
            "Sunday"
        ],
        "Times": ["8:00 AM", "9:00 AM", "10:00 AM"]
    },
    "Servers": [
        {
            "Name": "Test",
            "Schedules": {
                "Days": [
                    "Monday",
                    "Tuesday",
                    "Wednesday",
                    "Thursday",
                    "Friday"
                ],
                "Times": [
                    "8:30 AM",
                    "1:30 PM",
                    "5:00 PM"
                ]
            }
        },
        {
            "Name": "Staging",
            "Schedules": {
                "Times": [
                    "5:00 PM"
                ]
            }
        }
    ]
}

尝试的无效命令

jq '.Servers |= map(. + {"Schedules": .Schedules})'

该命令中引用的.Schedules是服务器项内的字段,而非顶层的默认配置,因此无法实现合并效果。

期望输出结果

[
    {
        "Name": "Test",
        "Schedules": {
            "Days": [
                "Monday",
                "Tuesday",
                "Wednesday",
                "Thursday",
                "Friday"
            ],
            "Times": [
                "8:30 AM",
                "1:30 PM",
                "5:00 PM"
            ]
        }
    },
    {
        "Name": "Staging",
        "Schedules": {
            "Days": [
                "Monday",
                "Tuesday",
                "Wednesday",
                "Thursday",
                "Friday",
                "Saturday",
                "Sunday"
            ],
            "Times": [
                "5:00 PM"
            ]
        }
    }
]

正确的JQ命令

jq '($default = .Schedules) | .Servers |= map(.Schedules = $default + .Schedules)' input.json

命令解释

  1. ($default = .Schedules):先将顶层的默认Schedules配置存入变量$default,方便后续引用。
  2. .Servers |= map(...):对Servers数组进行遍历处理。
  3. .Schedules = $default + .Schedules:将当前服务器项的Schedules替换为默认配置与自身配置的合并结果——JQ中对象合并时,后面的对象(项内自定义配置)会覆盖前面对象(默认配置)的同名字段,正好符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 21:50:17