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

jnber5

假设我有以下 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 查询数组,输出会返回

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

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

谢谢

pmf

使用 和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
    }
  ]
}

演示

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章