проанализировать одно поле из массива JSON в массив bash

У меня есть вывод JSON, содержащий список объектов, хранящихся в переменной. (Я не могу правильно формулировать это)

[ { "item1": "value1", "item2": "value2", "sub items": [ { "subitem": "subvalue" } ] }, { "item1": "value1_2", "item2": "value2_2", "sub items_2": [ { "subitem_2": "subvalue_2" } ] } ] 

Мне нужны все значения для item2 в массиве для сценария bash, который будет запущен на ubuntu 14.04.1.

Я нашел множество способов получить весь результат в массив, но не только те элементы, которые мне нужны

3 Solutions collect form web for “проанализировать одно поле из массива JSON в массив bash”

Используя jq :

 $ cat json [ { "item1": "value1", "item2": "value2", "sub items": [ { "subitem": "subvalue" } ] }, { "item1": "value1_2", "item2": "value2_2", "sub items_2": [ { "subitem_2": "subvalue_2" } ] } ] 

КОД:

 arr=( $(jq -r '.[].item2' json) ) printf '%s\n' "${arr[@]}" 

ВЫВОД:

 value2 value2_2 

Благодаря sputnick я добрался до этого:

 arr=( $(curl -k https://localhost/api | jq -r '.[].item2') ) 

JSON у меня есть выход из API. Все, что мне нужно было сделать wans, удалить аргумент файла и pipe | выход curl в jq. Отлично работает и сохранил некоторые шаги.

На самом деле багги:

 # BAD: Output line of * is replaced with list of local files; can't deal with whitespace arr=$( curl -k "$url" | jq -r '.[].item2' ) 

Вместо этого используйте:

 # GOOD (with bash 4.x+), but can't detect failure readarray -t arr < <(curl -k "$url" | jq -r '.[].item2' ) 

… или, еще лучше …

 # GOOD (with bash 3.x+), *and* has nonzero status if curl or jq fails IFS=$'\n' read -r -d '' -a arr \ < <(set -o pipefail; curl --fail -k "$url" | jq -r '.[].item2' && printf '\0') 
  • Связывание разделов Intel RAID 5 с загрузочным диском
  • Проблемы с DHCP Virtualbox
  • Дайте доступ к папке, доступной для корневой папки, для чтения и записи
  • Как исправить неподходящую систему Ubuntu?
  • Не удалось скачать видео с YouTube
  • Удалите все пакеты ядра, кроме используемого в данный момент
  • Что может заставить часы прыгать на 5 минут?
  • Cross-Distro Compatibility - что его останавливает?
  • Пользователь x не может использовать эту программу (crontab)
  • проверьте, присутствует ли строка в списке и выдает третий файл, если строка присутствует
  • Каков правильный способ ссылки на LINUX / UNIX в целом?
  • Linux и Unix - лучшая ОС в мире.