С помощью jq я пытаюсь использовать записи в одном массиве для индексации в отдельный массив. Простой ввод JSON будет выглядеть так:
{
"myArray": [ "AA", "BB", "CC", "DD", "EE" ],
"myFlags": [ 4, 3, 2, 1, 0 ]
}
Изящный оператор 'jq' затем может вывести массив myArray в область видимости, и индексирование работает нормально:
.myArray as $Array | .myFlags | .[] | $Array[.] ====> yields "EE","DD","CC","BB","AA"
Пока что JQ-руководство. Однако , если я попытаюсь переместить доступ к массиву $ Array вниз в функцию, область видимости переменной исчезнет:
def myFun: $Array[.]; .myArray as $Array | .myFlags | .[] | myFun
jq: error: $Array is not defined at <top-level>, line 1:
def myFun: $Array[.]; .myArray as $Array | .myFlags | .[] | myFun
Чтобы обойти это, я сейчас передаю временный JSON объект, содержащий как индекс, так и массив:
def myFun: .a[.b]; .myArray as $Array | .myFlags | .[] | { a: $Array, b: . } | myFun
Хотя это работает, я должен сказать, что мне это не очень удобно.
Действительно, это не так мне кажется, что это правильное поведение языка jq. Мне кажется, что область «as» должна сохраняться в вызываемых def-функциях. : - (
Есть ли лучший способ расширения as-scope до def-функций? Я упускаю некоторые тонкости jq?