jq 1.6使用unique_by按字段对子数组去重无效问题咨询
问题原因
你的写法错误在于作用对象不匹配:你把unique_by用在了顶层的整个对象数组上,而不是每个对象内部的bound_to子数组上,自然无法实现子数组去重的效果。
正确解决方案(兼容jq 1.6)
jq 'map(.bound_to |= unique_by(.where_to))'
效果说明
执行后会完整保留所有顶层记录,仅对每条记录的bound_to数组按where_to字段去重,重复条目仅保留第一条,完全符合需求:
- 第二条记录的
bound_to会从3条重复的where_to=3条目缩减为1条 - 第三条记录的
bound_to会从2条重复的where_to=10条目缩减为1条 - 第一条记录无重复,内容保持不变
原命令错误详解
你原本的写法. |= unique_by(.bound_to[].where_to)是尝试给顶层数组去重,且去重依据用了.bound_to[]展开语法,会返回多个值,逻辑完全偏离子数组去重的目标,所以不会修改bound_to内部的内容。
内容的提问来源于stack exchange,提问作者slivermoon
相关产品推荐
相关产品推荐

