Skip to content

Глава 1.3: Формат JSON

Время изучения: 35 минут


1. JSON: Язык космической связи

Представьте, что космический зонд и ЦУП говорят на разных языках. JSON (JavaScript Object Notation) — это универсальный язык данных, понятный и людям, и машинам. Как международный язык астронавтов!

Основные свойства:

  • 🪶 Легкий: быстрая передача даже при слабом сигнале
  • 👀 Человекочитаемый: структура видна невооруженным глазом
  • 🔄 Универсальный: поддерживается всеми языками программирования

💡 Космическая аналогия:

JSON — как цифровая телеграмма с данными о звездах. Вместо морзянки — четкие структуры {ключ: значение}.


2. Анатомия JSON-сообщения

JSON состоит из двух типов структур:

A. Объекты (Космические корабли)

{
  "name": "Voyager-1",
  "launch_year": 1977,
  "is_active": true,
  "position": [-19.1, 42.7, 0.3]
}

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:

  1. Имеет правильную структуру (проверьте скобки!)

  2. Содержит ожидаемые поля

  3. Не имеет синтаксических ошибок

Инструменты: - JSONLint (как детектор космического мусора для JSON) - Встроенные парсеры языка (выбросят ошибку при неверном формате)

⚠️ Пример ошибки:

{"planet": "Mars" → Нет закрывающей скобки!

Решение: Всегда используйте json.loads() в Python или JSON.parse() в JS для проверки.


Квиз для закрепления

1. JSON расшифровывается как...

2. Как обозначается объект в JSON:

3. Что НЕ является допустимым значением в JSON?

4. Почему JSON лучше XML для космических API?

5. Как преобразовать JSON-строку в объект Python?


🚀 Итог главы:

JSON — это "космический эсперанто" мира API. Зная его структуру, вы сможете:

  • 📡 Принимать данные с телескопов и зондов

  • 🔧 Конвертировать информацию между системами

  • 🛰️ Сохранять научные данные в файлах

Готовьтесь к стыковке! В следующей главе мы изучим архитектуру REST API — систему управления "космической станцией" вашего сервера.

📌 Практика: Зайдите на NASA Open APIs, найдите API астероидов (Asteroids NeoWs) и изучите структуру JSON в ответе!