jq过滤嵌套数组数组中值不同的项

jq filter items where values in a nested array array are different

假设我有以下 json。我想获取“员工”在一年中拥有不同团队的所有项目。

[
    {
        "id": 122343,
        "name": "Tom Muller",
        "teams": [
            {
                "year": "2010-2011",
                "team_id": 27
            },
            {
                "year": "2011-2012",
                "team_id": 27
            },
            {
                "year": "2013-2014",
                "team_id": 27
            }
        ]
    },
    {
        "id": 338744,
        "name": "Eric Gonzales",
        "teams": [
            {
                "year": "2010-2011",
                "team_id": 12
            },
            {
                "year": "2011-2012",
                "team_id": 17
            },
            {
                "year": "2013-2014",
                "team_id": 17
            }
        ]
    }
]

我想用 jq 查询数组,输出会 return

{
        "id": 338744,
        "name": "Eric Gonzales",
        "teams": [
            {
                "year": "2010-2011",
                "team_id": 12
            },
            {
                "year": "2011-2012",
                "team_id": 17
            },
            {
                "year": "2013-2014",
                "team_id": 17
            }
        ]
    }

我将如何编写这样的查询?

谢谢

使用 unique_by 可以将 .teams 数组缩减为 .team_id 不同的数组,使用 selectlength 可以过滤那些拥有不止一件这样的物品的人。

jq '.[] | select(.teams | unique_by(.team_id) | length > 1)'
{
  "id": 338744,
  "name": "Eric Gonzales",
  "teams": [
    {
      "year": "2010-2011",
      "team_id": 12
    },
    {
      "year": "2011-2012",
      "team_id": 17
    },
    {
      "year": "2013-2014",
      "team_id": 17
    }
  ]
}

Demo

这会为您提供一系列对象(以防有多个结果)。如果您想将它们作为数组,请使用 map(select(…)) 而不是 .[] | select(…)