2013-05-17 2 views
1

вот мой объект с образцами данныхпочему объект дает «неперехваченным TypeError: Преобразование круговую структуру JSON»

Object {map: Array[10], health: 100, ai: Array[4]} 
ai: Array[4] 
0: THREE.Object3D 
1: THREE.Object3D 
2: THREE.Object3D 
3: THREE.Object3D 
length: 4 
__proto__: Array[0] 
health: 100 
map: Array[10] 

не удалось выяснить, почему он дает эту ошибку .. кто поможет ??

+0

Нам нужно знать все ссылки на объекты внутри других объектов. У вас есть круговая ссылка (возможно, THREE.Object3D -> THREE.Object3D ref) –

ответ

0

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

+0

@meager спасибо за ответ. да, это дает ошибку при применении JSON.stringify. как я могу это понять? Я использовал пользовательский заменитель, но он не работает для меня. – astonish

0

Вы можете использовать dojox.json.ref, чтобы найти круглые ссылки. Этот код печатает JSON представление вашего objectWithCircularReferences:

require(["dojox/json/ref"], function(){ 
    console.log(dojox.json.ref.toJson(ko.toJS(objectWithCircularReferences))); 
}); 

Любое вхождение «$ реф» подстроки в его выходе на консоль поможет вам найти циклические ссылки. Вы можете альтернативно трубы это JSON выход на глобальную переменную ZZZ, как это, если вы хотите:

require(["dojox/json/ref"], function(){ 
    window.ZZZ = dojox.json.ref.toJson(ko.toJS(objectWithCircularReferences)); 
}); 

И, конечно, нужно включить додзё библиотеку заранее. В HTML файле:

<script src="//yandex.st/dojo/1.9.1/dojo/dojo.js"></script> 

В Firebug консоли:

include("//yandex.st/dojo/1.9.1/dojo/dojo.js") 

В консоли Chrome:

SCRIPT = document.createElement('script'); 
SCRIPT.src = '//yandex.st/dojo/1.9.1/dojo/dojo.js'; 
document.body.appendChild(SCRIPT); 
0

Это круговой детектор Referece:

o = {a: 1, b:2, c:{d:3, e:4}, q:[1,2,3,4,5,{f:6,g:7}]} 
o.o = o 
console.log(o) 
var done = [] 
function circRefDetec(o, path) { 
    done.push(o) 
    for (i in o) if (typeof o[i] == 'object') { 
     if (done.indexOf(o[i]) >= 0) { 
     console.log('CIRCULAR REFERECE DETECTED:', path +'.'+ i) 
     } else { 
     console.log(i, ':') 
     circRefDetec(o[i], path +' '+ i) 
     } 
    } 
} 
circRefDetec(o, 'obj') 
+0

Эти флаги «ОПРЕДЕЛЕННЫЙ ЦИРКУЛЯРНЫЙ ОБНАРУЖЕН» на каждом нулевом поле. Вы проверили это? –