簡體   English   中英

如何使用JQ根據一個值過濾一個object,並返回一個不同值的數組?

[英]How to use JQ to filter an object based on a value, and return an array of different values?

我有一個返回大量對象的調用。

對象看起來像:

{
  "accounts": [
    {
      "id": 1234,
      "name": "Sample Name",
      "status": "upgraded",
      "subscription": {
        "id": 4567,
        "products": [
          {
            "product_id": 5,
            "name": "Awesome Product",
            "units": 1,
            "price": 1
          },
          {
            "product_id": 1,
            "name": "Another Awesome Product",
            "units": 1,
            "price": 1
          }
        ]
      },
      "owner": {
        "id": 12345,
        "email": "email@email.com",
        "first_name": "John",
        "last_name": "Doe",
        "state": "active"
      }
    }
  ]
}

在這個數組中,有許多不同的對象,擁有許多不同的所有者,如果所有者屬性為 12345,我想返回一個僅包含 id(對象的第一個屬性)的數組。

到目前為止我有

| jq -r '.accounts[] | [.id]'

它返回 object 中的所有“id”,但我無法根據“所有者”值過濾此數組

我試過添加:

| jq -r '.accounts[] | [.id] | select(.id == 12345)'

但我目前收到錯誤

Cannot index array with string "id"

你很親密。 所有者ID12345的select賬戶,提取他們的(賬戶的,不是所有者的) ID ,你可以使用這個:

$ jq '.accounts | map(select(.owner.id == 12345) .id)' file
[
  1234
]

另一種選擇可能是

.accounts[]| select(.owner.id == 12345).id 

輸出:

1234

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM