首页 > 解决方案 > jq过滤具有特定值的对象并获取父对象的ID

问题描述

嗨,我正在玩 jq 并遇到问题。

这是我的数据:

{
    "auctionInfo": [{
            "tradeId": 229143000306,
            "itemData": {
                "id": 320854114832,
                "rating": 82
            }
        },
        {
            "tradeId": 229143000307,
            "itemData": {
                "id": 320854114833,
                "rating": 84
            }
        },
        {
            "tradeId": 229143000308,
            "itemData": {
                "id": 320854114834,
                "rating": 84
            }
        }
    ]
}

我现在想要的是评分为 84 的所有 tradeIds。

所以我用这个过滤器试了一下:

| jq -r .auctionInfo[].itemData | select(.rating==84)

但是使用这个过滤器,我在 itemData 内部,无法访问我感兴趣的 tradeId。我对 jq 不是很熟悉,所以可能是一个基本问题,但我怎样才能从我站在这个过滤器的位置到达 tradeId?

标签: jsonfilterjq

解决方案


我想你需要做的就在下面。逻辑是您需要列出所有数组对象,过滤评级值以获取子集并tradeId为这些对象打印

jq '.auctionInfo[] | select(.itemData.rating == 84).tradeId'

推荐阅读