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

如何通过jq程序化地将URI从virtual_endpoint追加到vs_endpoints?

解决jq追加URI到vs_endpoints的问题

嘿,我来帮你搞定这个jq的收尾工作!听起来你已经完成了大部分步骤,就差把virtual_endpoint里的URI字段追加到每个vs_endpoints元素里了,这事儿用jq其实挺直接的。

首先先假设你的main.json当前的结构大概是这样(如果实际结构有出入,后面可以调整路径):

{
  "virtual_endpoint": {
    "uri": "/api/v2/service"
  },
  "vs_endpoints": [
    {
      "id": "vs-001",
      "target": "192.168.1.10"
    },
    {
      "id": "vs-002",
      "target": "192.168.1.11"
    }
  ]
}

你可以用这条jq命令来实现需求:

jq '.vs_endpoints[] += {uri: .virtual_endpoint.uri}' main.json

我来拆解下这条命令的逻辑:

  • .vs_endpoints[]:遍历vs_endpoints数组里的每一个元素
  • +=:给每个遍历到的元素追加新的键值对(而不是覆盖原有内容)
  • {uri: .virtual_endpoint.uri}:从顶层的virtual_endpoint对象里取出uri的值,包装成新的uri字段添加到每个vs_endpoints元素中

执行完这条命令后,输出的结果就会是你想要的样子:

{
  "virtual_endpoint": {
    "uri": "/api/v2/service"
  },
  "vs_endpoints": [
    {
      "id": "vs-001",
      "target": "192.168.1.10",
      "uri": "/api/v2/service"
    },
    {
      "id": "vs-002",
      "target": "192.168.1.11",
      "uri": "/api/v2/service"
    }
  ]
}

如果想直接修改原文件(jq默认只是输出到控制台,不会修改原文件),可以用临时文件中转:

jq '.vs_endpoints[] += {uri: .virtual_endpoint.uri}' main.json > temp.json && mv temp.json main.json

或者如果你安装了moreutils工具包,用sponge更方便(避免临时文件):

jq '.vs_endpoints[] += {uri: .virtual_endpoint.uri}' main.json | sponge main.json

要是你的virtual_endpoint不在顶层(比如嵌套在某个子对象里),只需要调整.virtual_endpoint.uri的路径就行,比如如果它在.config.virtual_endpoint下,就改成{uri: .config.virtual_endpoint.uri}。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:14:21