Невозможно проанализировать вывод json с помощью JMESPATH

Я запускаю приведенную ниже команду azure cli, чтобы получить идентификаторы подписки для определенной группы управления.

Команда:

az account management-group show --name "Simple-NonProduction-EMG-v01" -e -r

Вывод:

{
  "children": [
    {
      "children": null,
      "displayName": "TestSub-ABC-Dev",
      "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "name": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "roles": null,
      "type": "/subscriptions"
    },
    {
      "children": null,
      "displayName": "TestSubIdentity",
      "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "name": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "roles": null,
      "type": "/subscriptions"
    },
    {
      "children": null,
      "displayName": "TestSub-Build-DevTest",
      "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "name": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "roles": null,
      "type": "/subscriptions"
    },
    {
      "children": null,
      "displayName": "Azure ITI - TestSub Pre-prod",
      "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "name": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "roles": null,
      "type": "/subscriptions"
    },
    {
      "children": null,
      "displayName": "TestSub-IS-Demo",
      "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "name": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "roles": null,
      "type": "/subscriptions"
    },
    {
      "children": null,
      "displayName": "TestSub-PQR-QA",
      "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "name": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "roles": null,
      "type": "/subscriptions"
    },
    {
      "children": null,
      "displayName": "TestSub-PQR-PreProd",
      "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "name": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "roles": null,
      "type": "/subscriptions"
    }
  ],
  "details": {
    "parent": {
      "displayName": "Simple-DMG-v01",
      "id": "/providers/Microsoft.Management/managementGroups/Simple-DMG-v01",
      "name": "Simple-DMG-v01"
    },
    "updatedBy": null,
    "updatedTime": "0001-01-01T00:00:00",
    "version": 0.0
  },
  "displayName": "Simple-NonProduction-EMG-v01",
  "id": "/providers/Microsoft.Management/managementGroups/Simple-NonProduction-EMG-v01",
  "name": "Simple-NonProduction-EMG-v01",
  "roles": null,
  "tenantId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "type": "/providers/Microsoft.Management/managementGroups"
}

Я запускаю приведенные ниже команды, но они не выводятся.

az account management-group show --name "Simple-NonProduction-EMG-v01" -e -r --query [].[children]
az account management-group show --name "Simple-NonProduction-EMG-v01" -e -r --query [].[children.children.name]
az account management-group show --name "Simple-NonProduction-EMG-v01" -e -r --query [].[children.children]

я не понимаю

  1. Почему я не получаю результат.
  2. Когда использовать квадратные скобки, а когда использовать одинарные кавычки.

Нет вывода и для следующей команды:

az account management-group show --name "Simple-NonProduction-EMG-v01" -e -r --query 'children.children.name'

Ссылка на использование одинарных кавычек: https://docs.microsoft.com/en-us/cli/azure/query-azure-cli?view=azure-cli-latest

Ссылка на использование квадратных скобок: https://adamraffe.com/azure/2017/11/22/the-wonderful-world-of-azure-cli-jmespath-queries/

Буду признателен за ваш вклад.

Спасибо


person learner    schedule 08.11.2019    source источник


Ответы (1)


попробуйте сделать это так:

az account management-group show --name "Simple-NonProduction-EMG-v01" -e -r --query `children`

а вот так:

az account management-group show --name "Simple-NonProduction-EMG-v01" -e -r --query 'children[].name'
person 4c74356b41    schedule 08.11.2019
comment
Не работает. Обратный галочка дает команду не найдена. children.name не возвращает никаких результатов. Я пробовал одинарные кавычки вместо обратных тиков, и это дает детям, к сожалению, children.name все еще не дает мне идентификаторы подписки. - person learner; 08.11.2019
comment
ну, потому что для id вам, очевидно, нужно использовать 'children.id', если вы хотите id; его цитаты, а не обратные кавычки - person 4c74356b41; 08.11.2019
comment
Понятия не имею, почему это не работает. Пробовал с "children.id", все равно без очарования ... - person learner; 08.11.2019
comment
ах, извините, это должно быть children[].id, так как children - это массив объектов - person 4c74356b41; 08.11.2019
comment
Спасибо, я понял и работает, но все еще не то, что мне нужно. Пример `` `az vm list --query []. [Name] -otable` `` `Эта команда дает мне список всех виртуальных машин в подписке. Это намного предпочтительнее, так как тогда я могу использовать что-то вроде head -2, чтобы легко получить список имен виртуальных машин. - person learner; 10.11.2019
comment
что ты имеешь в виду: still not what I want. это именно то, о чем вы просите - person 4c74356b41; 10.11.2019
comment
Я принимаю это как правильный ответ. Обновил и ответ. - person learner; 12.11.2019