JSON
JSON — это текстовый формат для обмена данными. В нём сервер присылает ответы, в нём хранят настройки и сохраняют данные в браузере. По виду JSON очень похож на объекты и массивы JavaScript, но это всегда строка.
Как выглядит JSON
JSON записывает объекты в фигурных скобках, массивы — в квадратных. Правила строже, чем в JavaScript: ключи и строки берут только в двойные кавычки, а лишняя запятая в конце запрещена.
{
"name": "Анна",
"age": 25,
"tags": ["admin", "editor"]
}В JSON можно записать строки, числа, true, false, null, массивы и объекты. Функций и undefined в нём нет.
JSON.stringify — объект в строку
JSON.stringify() превращает значение JavaScript в строку JSON. Это называют сериализацией:
const user = { name: 'Анна', age: 25 };
console.log(JSON.stringify(user)); // {"name":"Анна","age":25}Такую строку можно отправить на сервер или сохранить, а потом восстановить.
JSON.parse — строка в объект
JSON.parse() делает обратное: разбирает строку JSON и возвращает обычный объект, с которым можно работать:
const text = '{"name":"Олег","age":30}';
const user = JSON.parse(text);
console.log(user.age + 1); // 31Читаемый вывод
Третий аргумент JSON.stringify() задаёт отступ. С ним JSON разбивается на строки и его легче читать человеку:
const product = { title: 'Чай', price: 5 };
console.log(JSON.stringify(product, null, 2));
// {
// "title": "Чай",
// "price": 5
// }Второй аргумент, null, отвечает за отбор свойств — обычно его не используют.
Что теряется
Не всё переживает превращение в JSON. Функции и свойства со значением undefined пропадают, а дата становится строкой:
const data = {
name: 'Анна',
greet() {},
phone: undefined,
created: new Date(Date.UTC(2026, 0, 15)),
};
console.log(JSON.stringify(data)); // {"name":"Анна","created":"2026-01-15T00:00:00.000Z"}После JSON.parse() поле created будет строкой, а не датой.
Частая ошибка
JSON.parse() выбрасывает ошибку SyntaxError, если строка не является правильным JSON. Чаще всего виноваты одинарные кавычки или лишняя запятая:
try {
JSON.parse("{'name': 'Анна'}");
} catch (error) {
console.log(error.name); // SyntaxError
}Данные, пришедшие извне, всегда разбирайте внутри try...catch.