Как достать значение элементов из массива JSON на bash?

У меня есть API, который выводит массив Json такого формата: введите сюда описание изображения

введите сюда описание изображения

Как мне с помощью bash вывести данные из ключей "name" первых двух словарей? я знаю как логически это сделать на python, но как на bash не могу понять, подскажите пожалуйста. (в моем примере ключ "title")


Ответы (1 шт):

Автор решения: Zt.

для работы с json в консоли используйте утилиту jq которая является лучшей в своём роде.

через файл:

jq -r '.[0,1].title' file.json

через переменную:

echo "$JsonVar" | jq -r '.[0,1].title'

или вот более конкретный ответ(из комментария) когда json получаем из сети:

curl -s "https://jsonplaceholder.typicode.com/todos" | jq -r '.[0,1].title'

п.с.

можно конечно упороться и написать типа на bash используя grep, sed или тот же awk, как пример:

awk -F'"' '/"title": /{print $4}' file.json | head -2

но это всё не есть bash ))

из вышеперечисленного к башу относится разве что тока труба( "|" - pipe )

grep, sed, awk это внешние утилиты, и даже утилита head - хотя она и входит в состав coreutils но это не есть bash, а всего лишь базовый набор linux утилит, не bash.

Запуская в интерпретаторе bash утилиту type (которая как раз является встроенная в bash) можно в этом убедится:

$ type -t type grep sed awk head echo
builtin
file
file
file
file
builtin

$ type --help
...
-t  output a single word which is one of `alias', `keyword',
  `function', `builtin', `file' or `', if NAME is an alias,
  shell reserved word, shell function, shell builtin, disk file,
  or not found, respectively
→ Ссылка