JSON
JSON
Технический фундамент JSON
JSON — это формат сериализации данных.
Ключевая операция — перевод между in-memory структурой JS и строковым представлением для передачи/хранения.
const payload = { id: 1, name: 'Ann' };
const raw = JSON.stringify(payload);
const parsed = JSON.parse(raw);
console.log(typeof raw); // string
console.log(parsed.name); // Ann
Ключевой момент: JSON всегда строка, даже если визуально похож на объект.
JSON.stringify
Преобразует JS-значение в JSON-строку.
const user = { id: 1, name: 'Ann', active: true };
const json = JSON.stringify(user);
console.log(json); // '{"id":1,"name":"Ann","active":true}'
console.log(typeof json); // string
JSON.parse
Преобразует JSON-строку обратно в JS-значение.
const raw = '{"id":1,"name":"Ann"}';
const data = JSON.parse(raw);
console.log(data.name); // Ann
Что может быть в JSON
Разрешены: объект, массив, строка, число, true, false, null.
Не поддерживаются напрямую: undefined, функции, Symbol.
const value = { x: 1, fn: () => 1, y: undefined };
console.log(JSON.stringify(value)); // {"x":1}
Проверь себя: почему Date после stringify перестает быть объектом Date?
Подсказка: JSON не хранит тип Date. При stringify дата превращается в строку (обычно ISO), а parse возвращает обычную строку.
const raw = JSON.stringify({ createdAt: new Date('2026-01-01T00:00:00Z') });
const data = JSON.parse(raw);
console.log(typeof data.createdAt); // string
Если нужно восстановить типы, используют reviver (второй аргумент JSON.parse) или явное преобразование вручную.
Типичный рабочий сценарий
// запись в localStorage
localStorage.setItem('settings', JSON.stringify({ theme: 'dark' }));
// чтение из localStorage
const settings = JSON.parse(localStorage.getItem('settings') || '{}');
Смотри, что важно:
JSON.stringifyпропускаетundefinedв объектах, но в массивах превращаетundefinedвnull;BigIntне сериализуется в JSON и приводит к ошибке.
console.log(JSON.stringify([1, undefined, 3])); // [1,null,3]
// JSON.stringify({ id: 1n }); // TypeError
Обработка ошибок парсинга
Если JSON некорректный, JSON.parse бросает ошибку.
try {
JSON.parse('{bad json}');
} catch (error) {
console.log('Некорректный JSON');
}
Анти-провал: никогда не парси «сырой» внешний ввод без try...catch.
Типичные ошибки
- Путать объект и JSON-строку.
- Использовать одинарные кавычки внутри JSON.
- Ожидать, что функции/
undefinedсериализуются. - Не обрабатывать ошибку
JSON.parse.
Краткий итог
- JSON — стандартный текстовый формат обмена данными.
JSON.stringifyпревращает данные в строку.JSON.parseвозвращает JS-объект/массив из строки.- JSON имеет строгий формат и не хранит функции.
- Безопасный парсинг требует обработки ошибок.