簡體   English   中英

使用jq按鍵值過濾嵌套的json

[英]Filter a nested json by a key value using jq

初學者jq用戶在這里,嘗試使用jq過濾嵌套的json。

{
  "data": {
    "products": [
      {
        "id": "1",
        "title": "item01",
        "description": "item01 description",
        "skus": [
          {
            "color": "blue",
            "precision": 2,
            "details": {
              "longDescription": "This a long description with a keywordA"
            }
          },
          {
            "color": "green",
            "precision": 1,
            "details": {
              "longDescription": ""
            }
          }
        ]
      },
      {
        "id": "2",
        "title": "item02",
        "description": "item02 description",
        "skus": [
          {
            "color": "red",
            "precision": 2,
            "details": {
              "longDescription": ""
            }
          },
          {
            "color": "yellow",
            "precision": 1,
            "details": {
              "longDescription": ""
            }
          }
        ]
      }
    ]
  }
}

所需的輸出:

{
  "title": "item01",
  "color": "blue",
  "longDescription": "This a long description with a keywordA"
}

我可以獲得標題和描述jq '.data.products[] | {title: .title, longDescription: .skus[].details.longDescription } | select(.longDescription | contains("keywordA") )' jq '.data.products[] | {title: .title, longDescription: .skus[].details.longDescription } | select(.longDescription | contains("keywordA") )' jq '.data.products[] | {title: .title, longDescription: .skus[].details.longDescription } | select(.longDescription | contains("keywordA") )'結果:

{
  "title": "item01",
  "longDescription": "This a long description with a keywordA"
}

但是,如果我在過濾器中包含顏色,則會得到不正確的數據。 jq '.data.products[] | {title: .title, color:.skus[].color, longDescription: .skus[].details.longDescription } | select(.longDescription | contains("keywordA") )'

{
  "title": "item01",
  "color": "blue",
  "longDescription": "This a long description with a keywordA"
}
{
  "title": "item01",
  "color": "green",
  "longDescription": "This a long description with a keywordA"
}

有很多可能性,但是以下使用“生成並測試”方法的過濾器確實產生了預期的結果並說明了一些可能的技術:

.data.products[]
| {title} + (.skus[] | {color} + (.details | {longDescription}))
| select(.longDescription | contains("keywordA"))

暫無
暫無

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

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