← Назад к вопросам
Что такое 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 и логов благодаря простоте и универсальности.