json - 如何使用jq在`@name`为`dbUrl`的json数组中获取`@value`的值?
问题描述
以下test.json
文件是从带有xq的 xml 文件转换而来的:
{
"project": {
"@basedir": ".",
"property": [
{
"@environment": "env"
},
{
"@name": "foo",
"@value": "bar"
},
{
"@name": "aaa",
"@value": "bbb"
},
{
"@name": "dbUrl",
"@value": "123.123.123.123"
}
]
}
}
我怎样才能123.123.123.123
使用dbUrl
jq ?
请不要告诉我用来jq '.project.property[3]["@value"]' test.json
获取123.123.123.123
。
因为{"@name": "dbUrl", "@value": "123.123.123.123"}
不保证会出现在 的第 4 位property
。
例如:
{
"project": {
"@basedir": ".",
"property": [
{
"@environment": "env"
},
{
"@name": "foo",
"@value": "bar"
},
{
"@name": "dbUrl",
"@value": "123.123.123.123"
},
{
"@name": "aaa",
"@value": "bbb"
}
]
}
}
在这种情况下,jq '.project.property[3]["@value"]' test.json
不返回123.123.123.123
. 它返回bbb
。
解决方案
您不需要查看特定索引,只需使用select()
表达式为您执行此操作,它将返回@name
包含dbUrl
并返回其@value
jq --raw-output '.project.property[] | select(."@name"=="dbUrl") | ."@value"'
由于这些字段存在特殊字符@name
,因此您需要在引号内访问它们。@value
@