Как работать с JSON в JavaScript — parse и stringify?
Получаю данные с сервера в виде JSON-строки, а мне нужен объект, чтобы взять поля. И наоборот — объект отправить строкой. Какие методы для работы с JSON в JS и где люди обычно спотыкаются?
2 ответа
Два метода объекта JSON: parse (строка → объект) и stringify (объект → строка).
JSON.parse — разбирает JSON-строку в JS-объект:
const str = '{"name": "Аня", "age": 20}';
const obj = JSON.parse(str);
console.log(obj.name); // 'Аня'
console.log(obj.age); // 20 — это число
JSON.stringify — превращает объект в JSON-строку (например, чтобы отправить или сохранить):
const user = { name: 'Боб', age: 25 };
const str = JSON.stringify(user);
console.log(str); // '{"name":"Боб","age":25}'
Для красивого вывода с отступами — третий аргумент:
JSON.stringify(user, null, 2); // с переносами и отступом в 2 пробела
Где спотыкаются:
- parse падает на кривой строке. Любая опечатка (одинарные кавычки, висячая запятая) →
SyntaxError. Оборачивай в try/catch:
try {
const data = JSON.parse(input);
} catch (e) {
console.log('Невалидный JSON:', e.message);
}
-
Парсить уже готовый объект.
JSON.parse(obj)гдеobj— объект, а не строка, даст ошибку. parse ждёт строку. -
stringify теряет функции и
undefined— они просто выпадают из результата. Это нормально, JSON их не поддерживает. -
JSON требует двойные кавычки у ключей и строк — одинарные не пройдут парсинг.
Частый практический приём — глубокая копия объекта через пару stringify/parse:
const copy = JSON.parse(JSON.stringify(original));
Работает для простых данных (числа, строки, массивы, вложенные объекты), но не копирует функции, Date превратит в строку, а циклические ссылки уронят stringify. Для них есть structuredClone(original) в современных средах.