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

如何使用jq正确转换指定JSON对象?现有尝试结果不符合预期

解决JSON转换的jq命令问题

原始JSON数据

{
    "locals": {
      "products": {
        "core-tower1": {
          "core-tower1-product-a": ["dev"],
          "core-tower1-product-b": ["dev", "prod"]
        },
        "core-tower2": {
          "core-tower2-product-a": ["pol", "onb"],
          "core-tower2-product-a": ["dev", "prod"]
        }
      }
    }
  }

目标转换格式

{
        "core-tower1": [
          "core-tower1-product-a",
          "core-tower1-product-b"
        ],
        "core-tower2": [
          "core-tower2-product-a",
          "core-tower2-product-a"
        ]
      }

错误的jq命令及结果

你使用的命令:

jq {'(.locals.products|keys[])':'.locals.products|.[]|keys'}

得到的错误结果:

{
        "core-tower1": [
          "core-tower1-product-a",
          "core-tower1-product-b"
        ],
        "core-tower1": [
          "core-tower2-product-a",
          "core-tower2-product-a"
        ]
      }
 {
        "core-tower2": [
          "core-tower1-product-a",
          "core-tower1-product-b"
        ],
        "core-tower2": [
          "core-tower2-product-a",
          "core-tower2-product-a"
        ]
      }

正确的jq写法

方法一:使用with_entries(推荐)

这是最简洁的写法,直接遍历并转换每个条目:

jq '.locals.products | with_entries({key: .key, value: (.value | keys)})'

方法二:显式遍历转换

如果需要更直观的步骤,可以用to_entries和from_entries组合:

jq '.locals.products | to_entries[] | {key: .key, value: .value | keys} | from_entries'

错误原因说明

你之前的命令逻辑错误:(.locals.products|keys[])会遍历所有tower的名称,但.locals.products|.[]|keys会取出所有tower下的产品key列表,导致每个tower名称都对应了所有产品的集合,最终生成重复且错误的映射。

而正确的写法是针对每个tower条目,单独提取它自身的产品key列表,确保一一对应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:08:22