Фильтр вложенного массива с помощью jmespath (с использованием 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')]]

Результат:

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

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

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


person Pascal Naber    schedule 14.01.2019    source источник


Ответы (1)


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

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

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

person Charles Xu    schedule 15.01.2019
comment
Ну цитаты вокруг нее. Ok. Спасибо! - person Pascal Naber; 15.01.2019