如何用jq从JSON数组提取对应字段避免全连接重复结果?
解决jq提取JSON数组字段时的重复匹配问题
你遇到的问题本质是多次使用.results[]导致了笛卡尔积——每个id都和所有email、doc_number做了组合,所以才会生成8条重复结果,而非期望的2条对应记录。
正确的jq过滤器写法
你需要先遍历results数组中的单个对象,再从这个对象里提取对应字段,而不是让每个字段独立遍历整个数组。正确的过滤器如下:
.results[] | {user: .id, mail: .buyer.email, buyer: .buyer.billing_info.doc_number}
写法原理拆解
.results[]先把数组里的每个对象单独取出(第一次取id=111的对象,第二次取id=222的对象)- 接着对每个单独的对象,提取它自身的
id、buyer.email和buyer.billing_info.doc_number,这样每个对象只会生成一条匹配记录,不会出现跨对象的无效组合。
最终输出结果
运行上述过滤器后,你会得到预期的2条对应结果:
{"user":111,"mail":"mail1@mail.com","buyer":"123"} {"user":222,"mail":"mail2@mail.com","buyer":"456"}
内容的提问来源于stack exchange,提问作者Germán
相关产品推荐
相关产品推荐

