Глава 1.3: Формат JSON
Время изучения: 35 минут
1. JSON: Язык космической связи
Представьте, что космический зонд и ЦУП говорят на разных языках. JSON (JavaScript Object Notation) — это универсальный язык данных, понятный и людям, и машинам. Как международный язык астронавтов!
Основные свойства:
- 🪶 Легкий: быстрая передача даже при слабом сигнале
- 👀 Человекочитаемый: структура видна невооруженным глазом
- 🔄 Универсальный: поддерживается всеми языками программирования
💡 Космическая аналогия:
JSON — как цифровая телеграмма с данными о звездах. Вместо морзянки — четкие структуры
{ключ: значение}
.
2. Анатомия JSON-сообщения
JSON состоит из двух типов структур:
A. Объекты (Космические корабли)
B. Массивы (Звездные скопления)
[
{"name": "Sirius", "magnitude": -1.46},
{"name": "Canopus", "magnitude": -0.74},
{"name": "Arcturus", "magnitude": -0.05}
]
⚡ Правила синтаксиса:
- Ключи в кавычках
" "
- Значения: строки, числа, boolean (
true
/false
),null
- Данные разделены запятыми
- Фигурные скобки
{}
для объектов, квадратные[]
для массивов
3. JSON vs XML: Битва форматов
Параметр | JSON (Современный спутник) | XML (Старый телескоп) |
---|---|---|
Читаемость | Высокая (прямой доступ к полям) | Низкая (теги <planet>...</planet> ) |
Размер | Компактный | Громоздкий (+30% к размеру) |
Обработка | Быстрая | Медленная |
Пример | {"planet": "Mars"} |
<planet>Mars</planet> |
🔭 Почему JSON победил в космосе?
API NASA, SpaceX и ESA используют JSON — он идеален для передачи данных!
4. Работа с JSON в коде
Python пример (получение данных о Луне):
import requests
import json
# Используем реальное API, например, для получения данных о Солнечной системе
# от The Solar System OpenData API
try:
response = requests.get("https://api.le-systeme-solaire.net/rest/bodies/terre")
response.raise_for_status() # Проверяем на HTTP-ошибки (4xx, 5xx)
planet_data = response.json()
print(f"Название: {planet_data['englishName']}")
print(f"Спутники: {[moon['moon'] for moon in planet_data['moons']]}")
# Конвертация словаря Python в JSON-строку для сохранения
planet_json_str = json.dumps(planet_data, indent=2, ensure_ascii=False) # ensure_ascii=False для кириллицы
print("\n--- Отформатированный JSON ---")
print(planet_json_str)
except requests.exceptions.RequestException as e:
print(f"Ошибка запроса: {e}")
JavaScript пример (обработка данных телескопа):
const Data = `{
"id": "terre",
"name": "La Terre",
"englishName": "Earth",
"isPlanet": true,
"moons": [
{
"moon": "La Lune",
"rel": "https://api.le-systeme-solaire.net/rest/bodies/lune"
}
],
"semimajorAxis": 149598023,
"perihelion": 147095000,
"aphelion": 152100000,
"eccentricity": 0.0167,
"inclination": 0,
"mass": {
"massValue": 5.97237,
"massExponent": 24
},
"vol": {
"volValue": 1.08321,
"volExponent": 12
},
"density": 5.5136,
"gravity": 9.8,
"escape": 11190,
"meanRadius": 6371.0084,
"equaRadius": 6378.1366,
"polarRadius": 6356.8,
"flattening": 0.00335,
"dimension": "",
"sideralOrbit": 365.256,
"sideralRotation": 23.9345,
"aroundPlanet": null,
"discoveredBy": "",
"discoveryDate": "",
"alternativeName": "",
"axialTilt": 23.4393,
"avgTemp": 288,
"mainAnomaly": 358.617,
"argPeriapsis": 85.901,
"longAscNode": 18.272,
"bodyType": "Planet"
}`;
const dataObj = JSON.parse(Data);
console.log(dataObj.target);
5. Валидация JSON: Проверка "сигнала"
Перед использованием данных убедитесь, что JSON:
-
Имеет правильную структуру (проверьте скобки!)
-
Содержит ожидаемые поля
-
Не имеет синтаксических ошибок
Инструменты: - JSONLint (как детектор космического мусора для JSON) - Встроенные парсеры языка (выбросят ошибку при неверном формате)
⚠️ Пример ошибки:
{"planet": "Mars"
→ Нет закрывающей скобки!Решение: Всегда используйте
json.loads()
в Python илиJSON.parse()
в JS для проверки.
Квиз для закрепления
🚀 Итог главы:
JSON — это "космический эсперанто" мира API. Зная его структуру, вы сможете:
-
📡 Принимать данные с телескопов и зондов
-
🔧 Конвертировать информацию между системами
-
🛰️ Сохранять научные данные в файлах
Готовьтесь к стыковке! В следующей главе мы изучим архитектуру REST API — систему управления "космической станцией" вашего сервера.
📌 Практика: Зайдите на NASA Open APIs, найдите API астероидов (Asteroids NeoWs) и изучите структуру JSON в ответе!