Я пытаюсь проанализировать структуру JSON для извлечения пути зависимости для использования в скрипте автоматизации.
Структура этого JSON извлекается в такой формат:
[
{
"Id": "abc",
"Dependencies": [
]
},
{
"Id": "def",
"Dependencies": [
"abc"
]
},
{
"Id": "ghi",
"Dependencies": [
"def"
]
}
]
Примечание: удалено множество других не относящихся к делу полей.
План состоит в том, чтобы передать моей команде JQ идентификатор одного из них и получить список обратно.
Например:
Ввод: abc
Ожидаемый вывод: []
Ввод: def
Ожидаемый вывод: ["abc"]
Ввод: ghi
Ожидаемый вывод: ["abc", "def"]
В настоящее время имеется такой скрипт jq (https://jqplay.org/s/NAhuXNYXXO):
jq
'. as $original | .[] |
select(.Id == "INPUTVARIABLE") |
[.Dependencies[]] as $level1Dep | [$original[] | select( [ .Id == $level1Dep[] ] | any )] as $level1Full | $level1Full[] |
[.Dependencies[]] as $level2Dep | [$original[] | select ( [ .Id == $level2Dep[] ] | any )] as $level2Full |
[$level1Dep[], $level2Dep[]]'
Вход: abc
Выход: пусто
Ввод: def
Ввод: ["abc"]
Ввод: ghi
Ввод: ["def","abc"]
Отлично! Однако, как вы можете видеть, это не особенно масштабируемо и будет обрабатывать только два уровня зависимостей (https://jqplay.org/s/Zs0xIvJ2Zn), а также ужасно разваливается при наличии нескольких зависимостей на элементе (https://jqplay.org/s/eB9zHQSH2r).
Есть ли способ построить это в JQ или мне нужно перейти на другой язык?