JQ从列表提取多个子元素时如何避免生成叉乘结果
问题根源
出现叉乘结果是因为你在同一个对象构造表达式中两次使用了.Images[]展开数组:每一次.Images[]的迭代都会和另一个的迭代结果两两组合,2个元素的数组就会生成2*2=4条结果。
解决方案
你需要先遍历Images数组的单个元素,再将产品公共字段和单张图片的字段合并,避免重复展开数组,以下是两种可行写法:
写法1 变量存储公共字段(直观易读)
.Products[] | .SKU as $sku | .Description as $desc | .Images[] | { sku: $sku, desc: $desc, img_url: .FullUrl, img_angle: .Angle }
写法2 用map()实现(对应你推测的解决方案方向)
.Products[] | {sku: .SKU, desc: .Description} as $prod | .Images | map($prod + {img_url: .FullUrl, img_angle: .Angle})[]
两种写法输出完全符合预期,不会出现交叉组合问题,也不需要依赖图片URL和角度的字段值关联逻辑。
内容的提问来源于stack exchange,提问作者Beweeted
相关产品推荐
相关产品推荐

