jq: Невозможно индексировать массив со строкой

У меня есть следующий файл (который я буду называть "myfile"):

[{
    "id": 123,
    "name": "John",
    "aux": [{
        "abc": "random",
        "def": "I want this"
    }],
    "blah": 23.11
}]

Я могу разобрать его без [ и ] следующим образом:

$ cat myfile | jq -r '.aux[] | .def'
I want this
$

но с [ и ] я получаю:

$ cat myfile | jq -r '.aux[] | .def'
jq: error: Cannot index array with string

Как я могу работать с [ и ] с помощью jq? (Я уверен, что смогу разобрать их с помощью другого инструмента, но я хочу узнать правильное использование jq.

Ответ 1

Должен быть:

jq '.[].aux[].def' file.json

.[] итерации по внешнему массиву .aux[] затем выполняет .aux[] по массиву aux каждого узла, а .def печатает свое свойство .def.

Это приведет к выводу:

"I want this"

Если вы хотите избавиться от двойных кавычек, пропустите -r (--raw) в jq:

jq -r '.[].aux[].def' file.json

Вывод:

I want this