如何使用jq查找JSON数组中的重复项?
用jq查找JSON数组中的重复项
没问题!我来教你怎么用jq快速搞定这个需求,针对你给出的示例,咱们一步一步来:
核心命令
直接用这条jq表达式就能得到你想要的结果:
group_by(.) | map(select(length>1)) | unique
分步解释
咱们拆解一下每个部分的作用,方便你理解:
group_by(.):把数组里完全相同的元素归为一组。你的输入经过这一步会变成:[[{"foo":1,"bar":2},{"foo":1,"bar":2}], [{"foo":4,"bar":5}]]map(select(length>1)):筛选出元素个数大于1的分组(也就是存在重复的组),这时候结果是:[[{"foo":1,"bar":2},{"foo":1,"bar":2}]]unique:把每个分组里的重复元素去重,最终就得到了你要的输出:[{"foo":1,"bar":2}]
完整使用示例
如果你把输入存在input.json文件里,直接运行:
jq 'group_by(.) | map(select(length>1)) | unique' input.json
或者直接用管道传递输入:
echo '[{"foo": 1, "bar": 2}, {"foo": 1, "bar": 2}, {"foo": 4, "bar": 5}]' | jq 'group_by(.) | map(select(length>1)) | unique'
补充说明
这个方法适用于任何JSON结构的元素,不管是简单的键值对还是嵌套结构,jq都会递归比较整个元素的内容是否完全一致,非常靠谱~
内容的提问来源于stack exchange,提问作者M.Ridha
相关产品推荐
相关产品推荐

