在JSON数组

时间:2018-01-02 09:08:19

标签: json jq

有谁知道如何使用jq查找JSON数组中的副本?

例如:

输入:

[{"foo": 1, "bar": 2}, {"foo": 1, "bar": 2}, {"foo": 4, "bar": 5}]

输出:

[{"foo": 1, "bar": 2}]

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;