← Назад к вопросам

Что такое JSON и основные операции с ним?

1.0 Junior🔥 121 комментариев
#Форматы данных и хранение

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

JSON (JavaScript Object Notation)

JSON — это текстовый формат обмена данными, язык-независимый, человеко-читаемый. Является стандартом де-факто для API, конфигов и хранения полуструктурированных данных в Data Engineering.

Структура JSON

JSON поддерживает несколько базовых типов данных:

  • Объекты: {"key": "value"}
  • Массивы: [1, 2, 3]
  • Строки: "text"
  • Числа: 42, 3.14
  • Булевы: true, false
  • Null: null

Пример валидного JSON:

{
  "user_id": 123,
  "name": "Alice",
  "email": "alice@example.com",
  "is_active": true,
  "tags": ["python", "sql", "spark"],
  "metadata": {
    "created_at": "2024-01-15",
    "updated_at": null
  }
}

Основные операции в Python

1. Парсирование JSON (десериализация)

import json

json_string = '{"name": "Bob", "age": 30}'
data = json.loads(json_string)
print(data["name"])  # Bob

with open("data.json", "r") as f:
    data = json.load(f)

2. Сериализация (преобразование в JSON)

data = {
    "user_id": 456,
    "scores": [95, 87, 92],
    "verified": True
}

json_string = json.dumps(data, indent=2)
print(json_string)

with open("output.json", "w") as f:
    json.dump(data, f, indent=2)

3. Работа с датами (обработка non-JSON типов)

from datetime import datetime
import json

data = {
    "timestamp": datetime.now(),
    "status": "active"
}

class DateTimeEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime):
            return obj.isoformat()
        return super().default(obj)

json_string = json.dumps(data, cls=DateTimeEncoder)

Работа с JSON в Data Engineering

Парсирование логов API:

import json
from datetime import datetime

log_line = '{"event": "user_signup", "user_id": 789}'
event = json.loads(log_line)
print(f"Event: {event['event']}, User: {event['user_id']}")

Сохранение результатов в JSON Lines (JSONL):

records = [
    {"id": 1, "name": "Alice"},
    {"id": 2, "name": "Bob"},
    {"id": 3, "name": "Charlie"}
]

with open("data.jsonl", "w") as f:
    for record in records:
        f.write(json.dumps(record) + "\n")

with open("data.jsonl", "r") as f:
    for line in f:
        record = json.loads(line)
        print(record)

Сравнение и валидация:

json1 = json.loads('{"b": 2, "a": 1}')
json2 = json.loads('{"a": 1, "b": 2}')
print(json1 == json2)  # True

JSON в SQL базах данных

Многие БД (PostgreSQL, MySQL 5.7+) поддерживают JSON типы с операциями:

SELECT data->>'user_id' AS user_id FROM events;
SELECT data->'tags' AS tags FROM users WHERE data->>'status' = 'active';

Когда JSON проблематичен

  • Большие файлы — неэффективен (много текста), используй Parquet
  • Типизация — JSON слабо типизирован
  • Производительность — медленнее бинарных форматов

Альтернативы JSON

  • CSV — табличные данные
  • Parquet — оптимален для Big Data
  • Avro — схема + сериализация
  • Protobuf — компактный, типизированный

JSON остаётся основным форматом для API и логов благодаря простоте и универсальности.