Значение ключа для добавления во вложенный массив - PullRequest
0 голосов
/ 27 октября 2019

Это мой json, который я пытаюсь проанализировать, используя jq

{
    "orgs": {
        "org1": [{
                "space": "landscape2",
                "tag": "landscape2",
                "manager": {
                    "destination": "destination1"
                }},
            {
                "space": "landscape3",
                "tag": "landscape3",
                "manager": {
                    "destination1": "approuter",
                    "destination2": "approuter2"
                }},
            {
                "space": "landscape4",
                "app": "",
                "l_port_increment": 25,
                "host": "",
                "port": ""
            }],
        "org2": [
        {
                "space": "landscape1",
                "app": "ain-hana-chisel-cs",
                "l_port_increment": 13,
                "host": "10.03.76.234",
                "port": "30044"
            },
            {
                "space": "landscape3",
                "tag": "landscape3",                
                "manager1": {
                    "destination5": "service-v2",
                    "destination6": "service-v2"
                },
                "manager": {
                    "destination": "destination1"
                },
                "l_port_increment": 25,
                "host": "",
                "port": ""
            }   ]       }    }

Я ищу вывод, как показано ниже, где тег должен быть одним из фильтров.

{
  "orgs: "org1",
  "space": "landscape3",
  "tag": "landscape3",
  "manager": {
    "destination1": "approuter",
    "destination2": "approuter2"
  }
}
{
  "orgs": "org2",
  "space": "landscape3",
  "tag": "landscape3",
  "manager1": {
    "destination5": "service-v2",
    "destination6": "service-v2"
  },
  "manager": {
    "destination": "destination1"
  },
  "l_port_increment": 25,
  "host": "",
  "port": ""
}

Используя этот код, я могу частично добиться результата, но не могу получить подробности об организации. .orgs [] |. [] |выберите (. "tag" == "landscape3") |выберите (. "менеджер")

Мой фактический вывод, как показано ниже. Как это сделать с помощью jq? Я пробовал несколько способов, но не смог получить желаемый результат

 {
  "space": "landscape3",
  "tag": "landscape3",
  "manager": {
    "destination1": "approuter",
    "destination2": "approuter2"
  }
}
{
  "space": "landscape3",
  "tag": "landscape3",
  "manager1": {
    "destination5": "service-v2",
    "destination6": "service-v2"
  },
  "manager": {
    "destination": "destination1"
  },
  "l_port_increment": 25,
  "host": "",
  "port": ""
}

1 Ответ

0 голосов
/ 27 октября 2019

Ваше описание задачи не очень понятно, но я думаю, вы ищете что-то вроде этого:

.orgs
| keys_unsorted[] as $k
| {orgs:$k} + first(.[$k][] | select(has("manager") and .tag == "landscape3"))

Для каждого ключа в orgs выбираются объекты, которые имеют managerв качестве ключа и пары tag: landscape ключ-значение из соответствующего массива добавляет orgs: <key> к первому и выводит результирующий объект. Если выбрано несколько объектов, остальные, кроме первого, опускаются.

...