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 имеет строгий формат и не хранит функции.
  • Безопасный парсинг требует обработки ошибок.