使用 jq 从 JSON 输出中提取特定字段
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
}
]
}
}
我想提取三个 "name" 字段的值并将其存储在三个变量中。
我尝试 cat json_file | jq '.["example.sub-example.name"]'
提取 "name" 字段的值,但这不起作用。
谁能告诉我如何使用 jq(或其他方法)实现此目的?
如果您只想提取 name
字段,您要查找的命令是 jq '.example."sub-example" | .[] | .name'
。如果要将名称保存在数组中,请将整个 jq
表达式括在方括号中。
在 jq 1.3 中,您可以使用过滤器提取值:
.example["sub-example"] | .[] | .name
或更简洁:
.example["sub-example"][].name
这些当然也适用于更高版本的 jq。
读入 shell 个变量
与其填充单独的 shell 变量(这需要事先知道有多少个值),不如考虑填充一个 shell 数组。例如,使用 bash shell 和 mapfile
(又名 readarray
):
mapfile -t ary < <(< json_file jq '.example."sub-example"[].name')
您也可以使用 shell while
循环。等等等等。关于这个话题有很多SO Q。
已经有几年了,我最近不得不自己做这件事,所以我想我应该 post 换一种方式。
您还可以使用map()
来提取特定字段。例如
.example."sub-example"|map(.name)
我有一个 JSON 输出如下:
{
"example": {
"sub-example": [
{
"name": "123-345",
"tag" : 100
},
{
"name": "234-456",
"tag" : 100
},
{
"name": "4a7-a07a5",
"tag" : 100
}
]
}
}
我想提取三个 "name" 字段的值并将其存储在三个变量中。
我尝试 cat json_file | jq '.["example.sub-example.name"]'
提取 "name" 字段的值,但这不起作用。
谁能告诉我如何使用 jq(或其他方法)实现此目的?
如果您只想提取 name
字段,您要查找的命令是 jq '.example."sub-example" | .[] | .name'
。如果要将名称保存在数组中,请将整个 jq
表达式括在方括号中。
在 jq 1.3 中,您可以使用过滤器提取值:
.example["sub-example"] | .[] | .name
或更简洁:
.example["sub-example"][].name
这些当然也适用于更高版本的 jq。
读入 shell 个变量
与其填充单独的 shell 变量(这需要事先知道有多少个值),不如考虑填充一个 shell 数组。例如,使用 bash shell 和 mapfile
(又名 readarray
):
mapfile -t ary < <(< json_file jq '.example."sub-example"[].name')
您也可以使用 shell while
循环。等等等等。关于这个话题有很多SO Q。
已经有几年了,我最近不得不自己做这件事,所以我想我应该 post 换一种方式。
您还可以使用map()
来提取特定字段。例如
.example."sub-example"|map(.name)