![](/img/trans.png)
[英]How to filter this json by nested value using `jq` and print the parent key identifier?
[英]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.