jq实现字典多数组按位置合并 避免默认排列组合的方法
jq多数组按索引配对合并方案
你遇到的笛卡尔积输出是jq迭代器的默认行为:当在同一对象构造中使用多个数组展开(.title[]、.link[])时,会遍历所有元素的排列组合。
要实现同索引元素配对,使用transpose函数即可实现,对应的jq表达式为:
jq '[.title, .link] | transpose | map({title: .[0], link: .[1]})'
执行逻辑说明
- 第一步
[.title, .link]:将两个待合并的数组合并为二维数组,输出结果为:[["title1","title2"], ["http://testapi.cn","http://testapi.org"]] - 第二步
transpose:对二维数组按索引转置,将同位置的元素组合为子数组,输出结果为:[["title1","http://testapi.cn"], ["title2","http://testapi.org"]] - 第三步
map({title: .[0], link: .[1]}):遍历转置后的子数组,将每个子数组的两个元素分别映射为对应字段,最终得到预期输出。
额外说明
如果待合并的数组长度不一致,使用transpose(false)可以忽略不匹配的索引项,避免报错。
内容的提问来源于stack exchange,提问作者bofa 1ex
相关产品推荐
相关产品推荐

