使用 jmespath 过滤嵌套数组(使用 az cli)
Filter on nested array with jmespath (using az cli)
我想知道 TXT 记录中的值是否已在 DNS 中可用:
az network dns record-set txt show -g myresourcegroup -z 'mydomain' -n 'mytxtvalues'
这是 json 结果的一部分,它的全部内容是:
"txtRecords": [
{
"value": [
"abc"
]
},
{
"value": [
"def"
]
}
]
我尝试了很多查询。这些是我希望工作的 2 个。
az network dns record-set txt show -g myresourcegroup -z 'mydomain.com' -n 'mytxtvalues' --query txtRecords[?value[?starts_with(@, 'abc')]]
az network dns record-set txt show -g myresourcegroup -z 'mydomain.com' -n 'mytxtvalues' --query txtRecords[*].value[?starts_with(@, 'abc')]]
结果是:
At line:1 char:123
+ ... 'mytxtvalues' --query txtRecords[?value[?starts_with(@, 'abc') ...
+ ~ Unrecognized token in source text. At line:1 char:124
+ ... 'mytxtvalues' --query txtRecords[?value[?starts_with(@, 'abc')] ...
+ ~ Missing argument in parameter list.
似乎无法识别用于过滤数组的@。但是我不知道怎么查询。
要知道值 abc 是否已在列表中,正确的查询是什么?
您需要使用这样的命令:
az network dns record-set txt show -g myresourcegroup -z 'mydomain.com' -n 'mytxtvalues' --query "txtRecords[*].value[?starts_with(@, 'abc')]"
如果你只需要输出字符串,你可以附加参数-o tsv
。希望对您有所帮助。
我想知道 TXT 记录中的值是否已在 DNS 中可用:
az network dns record-set txt show -g myresourcegroup -z 'mydomain' -n 'mytxtvalues'
这是 json 结果的一部分,它的全部内容是:
"txtRecords": [
{
"value": [
"abc"
]
},
{
"value": [
"def"
]
}
]
我尝试了很多查询。这些是我希望工作的 2 个。
az network dns record-set txt show -g myresourcegroup -z 'mydomain.com' -n 'mytxtvalues' --query txtRecords[?value[?starts_with(@, 'abc')]]
az network dns record-set txt show -g myresourcegroup -z 'mydomain.com' -n 'mytxtvalues' --query txtRecords[*].value[?starts_with(@, 'abc')]]
结果是:
At line:1 char:123 + ... 'mytxtvalues' --query txtRecords[?value[?starts_with(@, 'abc') ... + ~ Unrecognized token in source text. At line:1 char:124 + ... 'mytxtvalues' --query txtRecords[?value[?starts_with(@, 'abc')] ... + ~ Missing argument in parameter list.
似乎无法识别用于过滤数组的@。但是我不知道怎么查询。
要知道值 abc 是否已在列表中,正确的查询是什么?
您需要使用这样的命令:
az network dns record-set txt show -g myresourcegroup -z 'mydomain.com' -n 'mytxtvalues' --query "txtRecords[*].value[?starts_with(@, 'abc')]"
如果你只需要输出字符串,你可以附加参数-o tsv
。希望对您有所帮助。