Разобрать объект json на bash

Я хочу написать bash-скрипт для цикла по массиву «certs». Я прочитал, что могу использовать пакет jq для правильного разбора json, но я не хочу использовать какой-либо пакет. Есть ли еще какой-нибудь изящный способ справиться с этим, пожалуйста?

response = {
  "name": "Test",
  "certs": ["BSc", "MSc"]
}
0
задан 5 May 2019 в 18:19

1 ответ

Вы можете использовать sed для создания списка содержимого массива с помощью:

sed '/certs/!d;s/[^[]*\[//;s/,//;s/\]$//'

Выбирает строку, содержащую строку «certs», и удаляет из нее все, кроме строк в массиве. Вы можете использовать команду подстановки, чтобы вставить этот список, например, в. цикл for:

for i in $(<json sed '/certs/!d;s/[^[]*\[//;s/,//;s/\]$//')
  do echo "$i"
done

Это зацикливает элементы, печатающие каждый из них на новой строке.

Альтернативой sed является grep для извлечения списка и tr для удаления запятых:

grep -oP 'certs": \[\K.*(?=])' | tr -d ,

Пример выполнения

Предоставленный вами пример текста сохраняется в файле с именем «JSON».

$ for i in $(<json sed '/certs/!d;s/[^[]*\[//;s/,//;s/\]$//'); do echo "$i"; done
"BSc"
"MSc"
0
ответ дан 5 May 2019 в 18:19

Другие вопросы по тегам:

Похожие вопросы: