проанализировать одно поле из массива 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') 
  • Как создать службу, которая начинается при запуске?
  • Windows 7 с двойной загрузкой + виртуализация в Ubuntu 10.04?
  • Включить историю для оболочки
  • Безвестная sudo команды, содержащей запятую
  • Войдите в систему как пользователь unix, используя пароль, хранящийся в htpasswd
  • Установка пакета и зависимости - как предотвратить установку существующих библиотек?
  • Больше не удается получить доступ к папкам: Ошибка ввода вывода
  • Установка Ubuntu 12 - разделы
  • Не удалось обновить прошивку «Ошибка обработки архива»
  • Как вручную вставить репозиторий в source.list?
  • * ОШИБКА * время ожидания ожидания включения панели
  • Linux и Unix - лучшая ОС в мире.