使用 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。希望对您有所帮助。