Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

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.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.