Что означает ошибка TypeError: JSON.stringify cannot serialize cyclic structures
easy

Что означает ошибка TypeError: JSON.stringify cannot serialize cyclic structures

Циклические структуры — атата!

Ситуация: мы готовим данные для отправки на сервер из браузера. Чтобы было проще, используем JSON (JavaScript Object Notation). Можно перевести как «способ записи объектов в JavaScript». Формат оказался настолько удобен, что его стали поддерживать практически все популярные языки программирования. Вот подробнее про то, как устроен этот формат и что он умеет:

Что такое JSON

На старте мы знаем, что данные будут иметь двумерную вложенность. Для этого мы создаём пустой объект, а потом на основе него создаём пару «ключ: значение», чтобы было это удобно было потом перевести в JSON:

var a = { };
var b = { a: a };

После этого мы создаём первый элемент нашей структуры и пробуем отправить данные на сервер, предварительно переведя их в JSON-формат:

a.b = b;
JSON.stringify(a);

Но когда мы пробуем выполнить этот код в браузере, то получаем ошибку:

❌ TypeError: JSON.stringify cannot serialize cyclic structures.

Что означает ошибка TypeError: JSON.stringify cannot serialize cyclic structures

Что это значит: JavaScript не может перевести в JSON-формат вложенные цикличные структуры данных.

Когда встречается: когда мы собираем объект из разных частей, каждая из которых ссылается на другую — использует её в качестве параметра или значения.

Что делать с ошибкой TypeError: JSON.stringify cannot serialize cyclic structures

Чтобы избавиться от ошибки TypeError: JSON.stringify cannot serialize cyclic structures, достаточно убрать вложенную структуру, когда объекты циклично ссылаются друг на друга. В нашем случае объект a содержит объект b, который, в свою очередь, состоит из объектов a. 

Лучше всего сделать так: заведём новую переменную, которую и будем потом переводить в JSON-формат:

var a = { };
var b = { a: a };
var c = {};
c[1] = b;
JSON.stringify(c);

Такой подход избавит нас от цикличных связей в объектах, и мы сможем перевести новый объект в JSON-формат.

Текст:

Михаил Полянин

Редактор:

Михаил Полянин

Обложка:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Мария Дронова

Соцсети:

Юлия Зубарева

Вы фронтендер? Гляньте сюда ↓
У нас есть курсы по прокачке навыков до уровня middle и далее. Начать можно бесплатно. Посмотрите, интересно ли вам это.
Начать бесплатно
Вы фронтендер? Гляньте сюда ↓ Вы фронтендер? Гляньте сюда ↓ Вы фронтендер? Гляньте сюда ↓ Вы фронтендер? Гляньте сюда ↓
Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
easy