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

使用jq转换JSON结构时如何避免生成笛卡尔积

正确jq命令方案

你可以用transpose对两个数组按索引配对,避免分别展开产生笛卡尔积,命令如下:

jq '.[0] | [.x, .y] | transpose | map({a: .[0], b: .[1]})'

命令逻辑说明

  1. .[0]取出外层数组中的第一个元素对象
  2. [.x, .y]将x、y两个数组合并为二维数组结构
  3. transpose对二维数组按列转置,得到[[x1,y1],[x2,y2],[x3,y3]]的配对结构
  4. map({a: .[0], b: .[1]})将每一组配对值转换为要求的key结构

如果你的输入外层数组可能包含多个待转换对象,可以使用适配多元素的版本:

jq 'map([.x, .y] | transpose | map({a: .[0], b: .[1]})) | add'

原命令错误原因

你原来的写法中.x[]和.y[]是分别迭代展开的,每一个x数组的元素都会匹配所有y数组的元素,因此生成了9条笛卡尔积结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 20:45:01