如何使用 jq 打印嵌套值和父级值

How to print nested values along with parent level values using jq

我有以下json

{
    "data": [
        {
            "id": id1,
            "arr": [
                {
                    "arrId": arrId11,
                    "someOtherKey1": xxx,
                    "someOtherKey2": xxx,
                },
                {
                    "arrId": arrId12,
                    "someOtherKey1": xxx,
                    "someOtherKey2": xxx,
                }
            ],
            "otherParentLevelKey": yyyyy
        },
        {
            "id": id2,
            "arr": [
                {
                    "arrId": arrId21,
                    "someOtherKey1": xxx,
                    "someOtherKey2": xxx,
                },
                {
                    "arrId": arrId22,
                    "someOtherKey1": xxx,
                    "someOtherKey2": xxx,
                }
            ],
            "otherParentLevelKey": yyyyy
        }
    ]
}

我想要以下输出

{
    "id": id1,
    "arr": [
        {
            "arrId": arrId11
        },
        {
            "arrId": arrId11
        }
    ]
}
{
    "id": id2,
    "arr": [
        {
            "arrId": arrId21
        },
        {
            "arrId": arrId21
        }
    ],
}

我尝试了以下查询,但它在语法上不正确

jsonArray | jq '.data[] | {id, arr[].arrId}'

我现在使用的方法类似于下面的方法。输出是我可以管理的,但我想知道是否有一种方法可以使用 jq 来实现我上面想要的。

jsonArray | jq '.data[] | [{(.id): .arr[].arrId}]'

使用 map 保留数组,同时根据您的需要修改(此处:减少)数组:

jq '.data[] | {id, arr: .arr | map({arrId})}'
{
  "id": "id1",
  "arr": [
    {
      "arrId": "arrId11"
    },
    {
      "arrId": "arrId12"
    }
  ]
}
{
  "id": "id2",
  "arr": [
    {
      "arrId": "arrId21"
    },
    {
      "arrId": "arrId22"
    }
  ]
}

Demo