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