Как отфильтровать удаление квадратной скобки в json_query? - PullRequest
0 голосов
/ 19 июня 2020

у меня есть файл ниже json, и я пытаюсь отфильтровать значение, но получаю двойную квадратную скобку, но я хочу удалить первую квадратную скобку с помощью regex_replace, но не так, как это работает .. этот json файл хранится в переменная с именем config_params оттуда я пытаюсь отфильтровать ..

{
  "servers": {
    "server_details": [
      {
        "srv_make": "hp",
        "newip_address": "192.168.200.139",
        "newhostname": "hostbh1",
        "nic_macaddress": {
          "nic1-mac1_nic2-mac1": [
            "b8:83:03:81:4b:20",
            "b8:83:03:84:d5:1c"
          ],
          "nic1-mac2_nic2-mac2": [
            "b8:83:03:81:4b:20",
            "b8:83:03:84:d5:1c"
          ]
        },
        "vmotion_ip_address": "10.10.20.36",
        "iscsi_ip_address": "192.168.0.36",

      }
    ]
  }
}

mac_group_list: "{{ config_params | json_query('servers.server_details[*].nic_macaddress.nic1-mac1_nic2-mac1') }}"

        [
          [
            "b8:83:03:81:4b:20",
            "b8:83:03:84:d5:1c"
          ]
        ]

Я ожидаю вывода, как показано ниже - как я могу добиться этого в запросе json.

  [
    "b8:83:03:81:4b:20",
    "b8:83:03:84:d5:1c"
  ]

Спасибо

1 Ответ

1 голос
/ 19 июня 2020

Ваш результат - список списков, и вам нужен первый элемент. Вы можете просто запросить первый элемент, например:

mac_group_list: >-
  {{ inputjson | json_query('servers.server_details[].nic_macaddress."nic1-mac1_nic2-mac1"')[0] }}"

Или вы можете использовать flatten фильтр:

mac_group_list: >-
  {{ inputjson | json_query('servers.server_details[].nic_macaddress."nic1-mac1_nic2-mac1"') | flatten }}

Возможно, вы также можете исправить свой запрос, но это сложнее ответить, не видя, как выглядят исходные данные.

Обновление

Или вы можете написать свой фильтр запроса следующим образом:

- set_fact:
    output: >-
      {{
        inputjson |
        json_query('servers.server_details[].nic_macaddress[]."nic1-mac1_nic2-mac1"[]')
      }}

Я переформатировал его для удобства чтения, но фактически это именно то, что у вас есть сейчас с дополнительным [] в конце. Учитывая ваши образцы данных - исправленные для соответствия предположениям, которые я описал в комментарии к вашему вопросу - это дает:

TASK [debug] *********************************************************************************************************************************************************************************
ok: [localhost] => {
    "output": [
        "b8:83:03:81:4b:20",
        "b8:83:03:84:d5:1c"
    ]
}
...