使用jq从JSON输出中提取特定字段
我有一个JSON输出,如下所示:使用jq从JSON输出中提取特定字段,json,jq,Json,Jq,我有一个JSON输出,如下所示: { "example": { "sub-example": [ { "name": "123-345", "tag" : 100 }, { "name": "234-456", "tag" : 100 }, { "name": "4a7-a07a5", "tag" : 100 }
{
"example": {
"sub-example": [
{
"name": "123-345",
"tag" : 100
},
{
"name": "234-456",
"tag" : 100
},
{
"name": "4a7-a07a5",
"tag" : 100
}
]
}
}
我想提取三个“name”字段的值,并将其存储在三个变量中
我尝试了cat-json_文件| 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-tary<已经有几年了,我最近不得不自己做这件事,所以我想我应该在这里发布另一种方式
您还可以使用map()
提取特定字段。e、 g
.example."sub-example"|map(.name)
参考:谢谢您的建议。但是,当我进行cat测试时,例如“sub-example”|.]|.name“我得到错误:错误:语法错误,意外的QQSTRING_开始,预期为IDENT.example。“sub-example”|.[]|.name ^1编译错误(以“^指向jq”后面的点。示例)您使用的是jq
的最新版本吗?它在我的系统上运行得很好。我使用的是1.5版(您可以使用jq--version
),它是1.3版(我是通过apt-get-install-jq下载的)。是否有其他方法获得最新版本?我使用的是Ubuntu 14.04服务器。如果我有一些字段“实例名称”而不是“名称”,那么命令jq.example.“sub-example”|.[]|.实例名称”不起作用。你有没有修复它的建议?那是因为它将.name-of-instance
解释为一个表达式(.name-of-instance
)。使用引号,就像我在“子示例”
中所做的那样。
.example."sub-example"|map(.name)