2015-05-14 2 views
2

Я использую Contentful со стеком MEAN. Я запрашиваю API-интерфейс Contentful и возвращаю json-объект.TypeError: Преобразование круговой структуры в JSON - найти ошибку в json

contentClient.entries(query, function(err, entries){ 
    if (err) throw err; 
    console.log(entries); 
}); 

Я просто получаю следующее сообщение об ошибке:

[TypeError: Converting circular structure to JSON]

Объект массивен (более 3000 строк, когда я экспортировать его из консоли документа). Поэтому я не могу опубликовать его здесь, но мне интересно, есть ли способ найти, где проблема круговой структуры находится внутри объекта и как я исправляю это?

+0

Аналогичный вопрос: http://stackoverflow.com/questions/7582001/is-there-a-way-to-test-circular-reference-in-javascript –

+0

Мне было бы очень интересно, если бы вы могли: var util = require ('util'), а затем console.log (util.inspect (записи)) и предоставить вывод. –

ответ

4

Я разработчик контента, и я думаю, что смогу помочь со второй частью вашего вопроса.

Что касается первой части, то ответ greuze - идеальная вещь, если вы находитесь в узловой земле. Альтернатива (которая также может быть полезна в браузере) использует https://www.npmjs.com/package/safe-json-stringify

Что касается второй части, то библиотекой contentful.js является разрешение ссылок на другие записи. Необработанный JSON содержит только объект с метаданными для ссылок, но связанные записи входят в прикрепленное свойство include. Затем библиотека идет и решает их, поэтому вам не нужно делать это самостоятельно.

Однако мы позволяем создавать круговые ссылки при связывании записей друг с другом (и вы даже можете связать запись с самим собой!), И сейчас мы не реализовали хороший способ обнаружить и представить тех, кто находится в CMS (хотя это хорошая идея, которую я предложу).

Итак, как только вы найдете эту Циркулярную ссылку, это должно быть вашей основной проблемой.

1

В узле 0,10 и 0,12, вы можете сделать:

var obj = {"child": {}}; 
obj.obj = obj; 
util.inspect(obj, {depth: null}) 

и вы получите что-то вроде:

'{ child: {}, obj: [Circular] }' 

Глубина показывает, сколько раз в рекурсию при форматировании объекта (2 по умолчанию), null указывает на неопределенное время.

Чтобы найти, где расположены круговые ссылки, довольно легко найти «[Циркуляр]» в полученной строке.

+0

Глядя на источник, console.log переустанавливает утилиту util.format(), которая отказывается от беспорядка кода для работы с глубоким вложением, форматированием и util.inspect(). До того, как использовать существующий пакет, большинство из них существовало в console.js. Я попытался испортить w/console.log, чтобы увидеть, как я могу даже сделать [TypeError: Преобразование круговой структуры в JSON], но не смог. Каждый раз, когда я это делал, я просто видел вывод [Circular], как вы описали как поведение util.inspect. –

 Смежные вопросы

  • Нет связанных вопросов^_^