![](/img/trans.png)
[英]How to extract the specific field value from the json using jq by passing the input key
[英]Extract a specific field from JSON output using jq
我有一個 JSON 輸出如下:
{
"example": {
"sub-example": [
{
"name": "123-345",
"tag" : 100
},
{
"name": "234-456",
"tag" : 100
},
{
"name": "4a7-a07a5",
"tag" : 100
}
]
}
}
我想提取三個“名稱”字段的值並將其存儲在三個變量中。
我試過cat json_file | jq '.["example.sub-example.name"]'
cat json_file | jq '.["example.sub-example.name"]'
提取“名稱”字段的值,但這不起作用。
誰能告訴我如何使用 jq(或其他方法)來實現這一目標?
如果您只想提取name
字段,您要查找的命令是jq '.example."sub-example" | .[] | .name'
jq '.example."sub-example" | .[] | .name'
jq '.example."sub-example" | .[] | .name'
。 如果要將名稱保留在數組中,請將整個jq
表達式括在方括號中。
在 jq 1.3 中,您可以使用過濾器來提取值:
.example["sub-example"] | .[] | .name
或更緊湊:
.example["sub-example"][].name
這些當然也適用於更高版本的 jq。
與其填充單獨的 shell 變量(這需要事先知道有多少個值),不如考慮填充一個 shell 數組。 例如,使用帶有mapfile
(又名readarray
)的 bash shell:
mapfile -t ary < <(< json_file jq '.example."sub-example"[].name')
您也可以使用 shell while
循環。 等等等等。關於這個話題有很多 SO Q。
已經有幾年了,我最近不得不自己做這件事,所以我想我應該在這里發布另一種方式。
您還可以使用map()
來提取特定字段。 例如
.example."sub-example"|map(.name)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.