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

使用JQ解析嵌套哈希,获取指定关联格式输出的问题

解决JQ解析JSON时产生笛卡尔积的问题

嘿,我懂你碰到的麻烦了——你现在得到的是所有字段的交叉组合(笛卡尔积),这是因为你的JQ表达式没把外层的name和data数组里的对应元素正确关联起来。咱们一步步来修正这个问题!

首先,先确认你的原始JSON结构:

{ 
  "name": "a", 
  "data": [ 
    { "sensitive": false, "type": "string", "value": "mykeypair" }, 
    { "sensitive": false, "type": "int", "value": 123 } 
  ] 
}

正确的JQ命令

你需要确保遍历data数组的每一项时,都能拿到外层的name,然后把三者拼接成指定格式,最后用空格连接所有结果。这里有两种简洁的写法:

写法一:先保存外层对象,再遍历数组

. as $root | .data[] | "\($root.name),\(.type),\(.value)" | join(" ")

写法二:先收集结果到数组,再拼接

. as $obj | [.data[] | "\($obj.name),\(.type),\(.value)"] | join(" ")

命令解释

  • . as $root:把整个JSON对象保存到变量$root中,这样在遍历data数组的每个元素时,依然能访问到外层的name字段。
  • .data[]:遍历data数组里的每一个子对象。
  • "\($root.name),\(.type),\(.value)":将外层的name、当前子对象的type和value拼接成你需要的字符串格式。
  • join(" "):把所有拼接好的字符串用空格连接起来,得到最终的输出。

执行结果

运行上面的命令后,你会得到期望的输出:

a,string,mykeypair a,int,123

为什么之前会出错?

如果你的原始表达式类似.name, .data[] | .type, .value这种,JQ会把name和data数组里的每个type、value进行交叉组合,也就是所谓的笛卡尔积,最终就会生成你看到的4个结果。关键就是要把name和data数组的每一项绑定在一起处理,避免交叉遍历。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:45:05