以下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
与jq一起使用,dbUrl
?
请不要告诉我使用jq '.project.property[3]["@value"]' test.json
来获取123.123.123.123
。
因为不能保证{"@name": "dbUrl", "@value": "123.123.123.123"}
会出现在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
。
答案 0 :(得分:2)
您无需查看特定的索引,只需使用select()
表达式为您完成操作,这将返回包含@name
的{{1}}并返回其{{1 }}
dbUrl
由于字段@value
和jq --raw-output '.project.property[] | select(."@name"=="dbUrl") | ."@value"'
带有特殊字符@name
,因此您需要在引号内对其进行访问。
答案 1 :(得分:0)
如果要将与“ @name”对应的所有“ @value”值都设为“ dbUrl”:
.. | objects | select(.["@name"] == "dbUrl") | .["@value"]
在这里,我使用.["KEYNAME"]
表单来访问与“ KEYNAME”相对应的值,因为它比.KEYNAME
更可靠。