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.


person Xu Wang    schedule 31.12.2015    source источник


Ответы (1)


Должен быть:

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

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

Это выведет:

"I want this"

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

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

Выход:

I want this
person hek2mgl    schedule 31.12.2015
comment
Хороший ответ, спасибо за подсказку -r за удаление кавычек, очень удобно. - person kramfs; 26.09.2020