有谁知道如何使用jq查找JSON数组中的副本?
例如:
输入:
[{"foo": 1, "bar": 2}, {"foo": 1, "bar": 2}, {"foo": 4, "bar": 5}]
输出:
[{"foo": 1, "bar": 2}]
答案 0 :(得分:6)
jq中的许多可能解决方案之一:
group_by(.) | map(select(length>1) | .[0])
答案 1 :(得分:0)
对于长数组可能更快的无排序解决方案:
reduce .[] as $x ({}; .[$x|tojson]+=1)
| to_entries
| map(select(.value|length>1) | .key | fromjson)
tojson / fromjson的东西是为了普遍性。如果已知数组元素是字符串,则可以跳过它们。或者,我们可以定义一个过滤器来吃蛋糕并吃大部分:
def duplicates:
if all(type == "string") then
reduce .[] as $x ({}; .[$x]+=1)
| to_entries
| map(select(.value|length>1) | .key)
else
reduce .[] as $x ({}; .[$x|tojson]+=1)
| to_entries
| map(select(.value|length>1) | .key | fromjson)
end;