Как распарсить JSON

В этой статье я покажу как можно распарсить JSON вывод с помощью простых команд Linux. Т.е. без применения языков программирования.

В Linux есть утилита jq, которая умеет парсить JSON формат. С её помощью можно парсить, фильтровать, сопоставлять и преобразовывать json-данные без усилий.

Установка в Debian:

$sudo apt-get install jq

Всё, установили. Начинаем парсить JSON.

Допустим у нас есть такой документ:

{ "cgi_json_version": "1.9.0",

"icinga_status": {

"status_data_age": 30,

"status_update_interval": 15,

"reading_status_data_ok": true,

"program_version": "1.9.3",

"icinga_pid": 5954,

"timezone": "UTC",

...

"flap_detection_enabled": false,

"performance_data_being_processed": false

},

"extinfo": {

"host_info": {

"host_name": "shellbox11.infra.hostcomm.ru",

"host_display_name": "shellbox11.infra.hostcomm.ru",

"has_been_checked": true,

"status": "UP",

"state_type": "HARD",

...

"event_handler_enabled": false,

"flap_detection_enabled": false

,

"host_comments": [

],

"host_downtimes": [

] }

}

}

 

Вытащим объект cgi_json_version:

# cat json.txt | jq '.cgi_json_version'

"1.9.0"

Чтобы распарсить вложенный объект:

# cat json.txt | jq '.icinga_status.program_version'

"1.9.3"

Чтобы извлечь конкретные поля из JSON:

# cat json.txt | jq '.icinga_status | {program_version,icinga_pid}'

{

"program_version": "1.9.3",

"icinga_pid": 5954

} 

unix-way