2015-01-11 2 views
0

Я работаю над диаграммой радиального дерева в javascript, используя d3.js и jquery. Я использую json-файлы для загрузки данных в javascript var. После работы над диаграммой и внесения некоторых изменений, например. меняя родительский элемент некоторых узлов, я хочу сжать данные и сохранить их как json-файл. Когда я строю переменную treeData, которая включает все json-данные и хочет ее отобразить, я получаю только корневой узел, стробированный. Это мой код:Как связать круговой объект JSON и сохранить его в файл?

var json = JSON.stringify(treeData.children, function(key,value){ 
    if(key == "children"){ 
     return undefined; 
    } 
    return value; 
}); 
alert("Json: " + json); 

Также я не знаю, почему ключ установлен на «дети». Моя структура JSON файл:

{ 
"name": "root", 
"children": [ 
    { 
    "name": "child1", 
    "children": [ ... ] 
    } 
] 
} 
+1

Вы специально исключаете свойства 'children' при сериализации объекта, как вы ожидаете, что результатом будет что-то, кроме только корневого узла без свойства' children'? – Guffa

+0

Вы правы. Структура объекта в js var не такая же, как загруженный json-файл. Я просто меняю «детей» на «родителя», и он работает правильно. Он вышел мне на минуту раньше, я прочитал ваш ответ, но спасибо! – Nojas

ответ

0

Проблема в том, что использование данные дерева возвращаются с циклической и круговой ошибкой данных. Переключение ключа с «children» на «parent» дает json без ссылок на родителей и работает правильно.

2

У вас есть children ключа в литерале объекта, так что передаются в CallBack, а затем по какой-то причине вы возвращаете неопределенны, который будет удалить этот ключ из результата.

0

Если я правильно понимаю, что вы пытаетесь достичь stringifying объекта структурированную как:

var obj = {}; 
obj.circle = obj; 
var str = JSON.stringify(obj); 
// → Error 

Этот объект будет возвращать ошибку с JSON.stringify, хотя в остальном действует. Если вы не возражаете, читаемость строкового объекта, я предлагаю использовать CircularJSON:

Установку при использовании Node.js:

npm install --save circular-json 

Установка для сети:

<script src="build/circular-json.js"></script> 

И использование :

var object = {}; 
object.arr = [ 
    object, object 
]; 
object.arr.push(object.arr); 
object.obj = object; 

var serialized = CircularJSON.stringify(object); 
// → '{"arr":["~","~","~arr"],"obj":"~"}' 

var unserialized = CircularJSON.parse(serialized); 
// → { arr: [ [Circular], [Circular] ], obj: [Circular] }