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

jq数组过滤器:为匹配NP01-RW组的嵌套数组添加用户并返回完整JSON

解决jq修改指定组的policyItems并返回完整JSON的问题

问题说明

需要在给定JSON结构中,找到包含NP01-RW组的policyItems对象,为其users数组添加新用户,同时返回完整的JSON结构。此前尝试的jq命令仅返回匹配的部分片段,无法保留原JSON的完整结构,尝试的命令如下:

jq --arg username "$sync_userName" '.policyItems[] | select(.groups[] | IN("NP01-RO")).users += [$username]' > ${sync_policyName}.json

解决方案

使用|=操作符替代管道符|来修改原数组,确保完整JSON结构被保留。正确的jq命令如下:

jq --arg username "$sync_userName" '.policyItems |= map(select(.groups[] | IN("NP01-RW")) |= .users += [$username])' > ${sync_policyName}.json

命令解释

  1. .policyItems |= ...:将修改后的policyItems数组赋值回原字段,确保整个JSON结构不变
  2. map(...):遍历policyItems中的每个对象
  3. select(.groups[] | IN("NP01-RW")):筛选出包含NP01-RW组的对象(注意修正了原命令中组名写错的问题,原命令误写为NP01-RO)
  4. |= .users += [$username]:对筛选出的对象,将新用户追加到users数组中

示例验证

假设原始JSON为:

{
  "policyName": "example-policy",
  "policyItems": [
    {
      "groups": ["NP01-RW", "ADMIN"],
      "users": ["alice", "bob"]
    },
    {
      "groups": ["NP01-RO"],
      "users": ["charlie"]
    }
  ]
}

执行命令(假设$sync_userName为dave)后,输出的完整JSON会变为:

{
  "policyName": "example-policy",
  "policyItems": [
    {
      "groups": ["NP01-RW", "ADMIN"],
      "users": ["alice", "bob", "dave"]
    },
    {
      "groups": ["NP01-RO"],
      "users": ["charlie"]
    }
  ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 12:45:36