JQ Group_by/Unique处理嵌套数组失效,如何提取唯一JSON条目?
解决JQ从嵌套JSON数组提取唯一条目去重问题
问题说明
需要从嵌套JSON结构中提取唯一的DN与SA组合并输出为CSV,但现有JQ过滤器输出存在重复内容。
原始JSON数据
[ {"SIR":[{"PMD":[{"MMA":[{"DN":"One","SA":"1"},{"DN":"Two","SA":"2"}]}]}]}, {"SIR":[{"PMD":[{"MMA":[{"DN":"Two","SA":"2"},{"DN":"Four","SA":"4"}]}]}]}, {"SIR":[{"PMD":[{"MMA":[{"DN":"Three","SA":"3"},{"DN":"Five","SA":"5"}]}]}]} ]
产生重复结果的JQ过滤器
'.[].SIR.PMD.MMA | [.DN, .SA] | @csv'
当前输出(含重复)
One,1 Two,2 Two,2 Three,3 Four,4 Five,5
期望输出(无重复)
One,1 Two,2 Three,3 Four,4 Five,5
解决方案
修改JQ过滤器,先聚合所有目标条目,再执行去重操作,最终输出CSV:
[.[].SIR[].PMD[].MMA[] | [.DN, .SA]] | unique[] | @csv
关键步骤解释
- 遍历嵌套数组:
.[].SIR[].PMD[].MMA[]逐层展开嵌套的数组结构,取出每一个包含DN和SA的对象。 - 聚合为数组:用外层
[]将所有[.DN, .SA]组合收集成一个大数组,为去重做准备。 - 去重处理:
unique函数会基于数组元素的内容进行比较,移除重复的条目。 - 转换为CSV:展开去重后的数组,每个元素通过
@csv格式化为CSV行。
内容的提问来源于stack exchange,提问作者CD007
相关产品推荐
相关产品推荐

