- Home »

Простой пример работы с JSON для начинающих
В этой статье разберёмся с JSON — что это за зверь, почему он стал стандартом де-факто для обмена данными между сервисами, и как быстро научиться с ним работать даже тем, кто не пишет код каждый день. Будет полезно тем, кто настраивает серверы, автоматизирует процессы, пишет скрипты для мониторинга или просто хочет не тупить, когда в логах или API прилетает что-то в фигурных скобках. Покажу на пальцах, как читать, парсить, генерировать и валидировать JSON, а также расскажу, где это реально экономит время и нервы. Всё — на реальных примерах, с командами и советами, чтобы можно было сразу внедрять в свои проекты или на сервере.
Как это работает? Простое объяснение JSON
JSON (JavaScript Object Notation) — это текстовый формат для хранения и обмена структурированными данными. Его придумали для JavaScript, но сейчас он поддерживается везде: от bash-скриптов до Python, от curl до Ansible. Синтаксис максимально похож на словари и массивы: ключ-значение, массивы в квадратных скобках, строки в кавычках. Вот пример:
{
"server": "vps01",
"ip": "192.168.1.10",
"status": "active",
"services": ["nginx", "mysql", "ssh"]
}
Выглядит просто, но за этим стоит мощь: JSON легко читается человеком, быстро парсится машиной, не требует сложных библиотек и не перегружен лишними тегами (привет, XML). Поэтому его любят в REST API, конфиг-файлах, логах и даже в некоторых CLI-утилитах.
Как быстро и просто всё настроить?
Если вы работаете с сервером, JSON встретится в трёх случаях:
- API-запросы (например, к облаку или мониторингу)
- Конфигурационные файлы (например, для Docker, Ansible, некоторых демонов)
- Логи и отчёты (например, вывод утилит типа
curl
илиjq
)
Вот базовый набор инструментов для работы с JSON на сервере:
- jq — универсальный парсер и фильтр для JSON в командной строке
- Python — встроенный модуль
json
для скриптов - curl — для получения JSON из API
- yq — если нужно работать с YAML и JSON одновременно
Установка jq
(пример для Ubuntu/Debian):
sudo apt update
sudo apt install jq
Проверить работу:
echo '{"hello": "world"}' | jq .
Результат:
{
"hello": "world"
}
Теперь можно вытаскивать нужные значения:
echo '{"server": "vps01", "ip": "192.168.1.10"}' | jq '.ip'
Ответ:
"192.168.1.10"
Примеры, схемы, практические советы
Рассмотрим типовые задачи, которые часто встречаются при работе с JSON на сервере.
1. Получение данных из API
Допустим, нужно получить список серверов из облака (например, через REST API). Обычно ответ приходит в JSON. Пример:
curl -s https://api.example.com/servers | jq '.servers[] | {name: .name, ip: .ip}'
Это выведет список серверов с именами и IP-адресами. Без jq
пришлось бы городить парсинг через grep
и awk
— боль и страдания.
2. Генерация JSON для API-запроса
Часто нужно отправить данные в API. Можно собрать JSON прямо в bash:
json=$(jq -n --arg name "vps01" --arg ip "192.168.1.10" '{name: $name, ip: $ip}')
curl -X POST -H "Content-Type: application/json" -d "$json" https://api.example.com/servers
Это надёжнее, чем писать руками строки с кавычками и запятыми.
3. Валидация JSON
Иногда JSON прилетает битый (например, из-за кривого копипаста или бага в сервисе). Проверить валидность можно так:
cat file.json | jq empty
Если всё ок — тишина. Если ошибка — подробное сообщение.
4. Преобразование JSON в другие форматы
Иногда нужно быстро перевести JSON в CSV или просто вытащить список значений:
cat servers.json | jq -r '.servers[] | [.name, .ip] | @csv'
Результат:
"vps01","192.168.1.10"
"vps02","192.168.1.11"
5. Использование в скриптах
JSON отлично ложится в автоматизацию. Например, скрипт для мониторинга статуса сервисов:
#!/bin/bash
json=$(curl -s https://api.example.com/status)
status=$(echo "$json" | jq -r '.status')
if [ "$status" != "ok" ]; then
echo "ALERT: Service is down!"
fi
6. Сравнение с другими форматами
Формат | Плюсы | Минусы | Где использовать |
---|---|---|---|
JSON | Простой, читаемый, поддерживается везде, легко парсится | Нет комментариев, не поддерживает сложные типы (например, даты) | API, логи, конфиги, обмен между сервисами |
YAML | Читаемый, поддерживает комментарии, вложенность | Сложнее парсить, чувствителен к отступам | Конфиги (Kubernetes, Ansible), CI/CD |
XML | Гибкий, поддерживает схемы, валидацию | Шумный синтаксис, сложнее читать и писать | Старые API, банковские системы |
Положительные и отрицательные кейсы
-
Положительный:
Автоматизация деплоя через Ansible — inventory в JSON, легко парсить, быстро обновлять, интегрировать с внешними сервисами. -
Отрицательный:
Большие конфиги с комментариями — JSON не поддерживает комментарии, приходится городить костыли или переходить на YAML. -
Положительный:
Мониторинг через Prometheus — экспортеры часто отдают метрики в JSON, удобно парсить и агрегировать. -
Отрицательный:
Человеческое редактирование — легко ошибиться с запятыми или кавычками, особенно в больших файлах.
Команды и утилиты для работы с JSON
- jq — https://stedolan.github.io/jq/
- yq — https://github.com/mikefarah/yq
- Python json — https://docs.python.org/3/library/json.html
- curl — https://curl.se/
Примеры команд:
# Получить и красиво вывести JSON
curl -s https://api.example.com/data | jq .
# Вытянуть конкретное поле
jq '.field' file.json
# Проверить валидность JSON
jq empty file.json
# Преобразовать JSON в CSV
jq -r '.items[] | [.name, .value] | @csv' file.json
# Генерировать JSON из bash
jq -n --arg key "value" '{key: $key}'
Похожие решения и альтернативы
- yq — для работы с YAML и JSON, особенно если приходится конвертировать между форматами.
- jo — генерация JSON в bash, альтернатива
jq -n
. - python -m json.tool — быстрый prettify и валидация JSON из коробки.
- Vim/VSCode плагины — для подсветки и проверки JSON прямо в редакторе.
Статистика и сравнение
- JSON используется в 99% REST API (по данным Postman State of the API).
- В 2023 году jq был установлен более 10 млн раз только через apt/yum.
- YAML чаще встречается в конфиг-файлах, но для обмена данными между сервисами почти всегда выбирают JSON.
Интересные факты и нестандартные способы использования
- Можно использовать JSON для хранения кэша в bash-скриптах — быстро, удобно, не надо городить свой парсер.
- Некоторые базы данных (например, PostgreSQL) поддерживают хранение и запросы по JSON-полям — удобно для гибких схем.
- В systemd можно получать статус сервисов в JSON через
systemctl show --output=json
. - В Docker логи контейнеров можно выводить в JSON для последующей агрегации.
Новые возможности: автоматизация и скрипты
JSON открывает массу возможностей для автоматизации:
- Лёгкая интеграция с внешними сервисами (API, webhook, облака)
- Гибкая обработка данных в скриптах (bash, Python, Perl, Go)
- Быстрая генерация и валидация конфигов для CI/CD
- Агрегация и фильтрация логов для мониторинга и алертов
Например, можно собрать скрипт, который раз в час опрашивает API облака, вытаскивает список серверов, сравнивает с локальным списком и автоматически запускает/останавливает нужные инстансы. Всё — через пару строк на jq
и curl
.
Выводы и рекомендации
JSON — это не только про разработку, но и про быструю автоматизацию, интеграцию и удобство в повседневной работе с сервером. Если вы ещё не используете jq
или не умеете парсить JSON в bash — самое время начать. Это реально экономит часы на рутине, позволяет строить гибкие пайплайны и не зависеть от костылей вроде grep
+awk
. Для сложных конфигов — смотрите в сторону YAML, но для обмена данными и автоматизации JSON вне конкуренции.
Если вы ищете, где всё это применить на практике — попробуйте VPS или выделенный сервер для своих экспериментов. Там можно без ограничений тестировать API, писать скрипты, строить свои пайплайны и автоматизировать всё, что душа пожелает.
Вопросы, кейсы, лайфхаки — пишите в комментарии. Удачной автоматизации!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.