Фильтровать вложенный массив с помощью jmespath (используя az cli) - PullRequest
0 голосов
/ 14 января 2019

Я хотел бы знать, доступно ли значение в записи 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')]]

Результат:

В строке: 1 символ: 123 + ... 'mytxtvalues' --query txtRecords [? значение [? start_with (@, 'abc') ... + ~ Нераспознанный токен в исходном тексте. В строке: 1 символ: 124 + ... 'mytxtvalues' --query txtRecords [? значение [? start_with (@, 'abc')]] ... + ~ Отсутствует аргумент в списке параметров.

Похоже, @, используемый для фильтрации массива, не распознается. Но я не знаю, как запросить иначе.

Какой будет правильный запрос, чтобы знать, если значение abc уже присутствует в списке?

1 Ответ

0 голосов
/ 15 января 2019

Вам нужно использовать такую ​​команду:

az network dns record-set txt show -g myresourcegroup -z 'mydomain.com' -n 'mytxtvalues' --query "txtRecords[*].value[?starts_with(@, 'abc')]"

И если вам просто нужно вывести строку, вы можете добавить параметр -o tsv. Надеюсь, это поможет вам.

...