2015-01-11 40 views
0

我正在使用d3.js和jquery在JavaScript中使用径向树形图。我使用json文件将数据加载到javascript var。在绘制图表并进行一些更改后,例如改变一些节点的父节点,我想将数据串化并保存为json文件。当我对包含所有json数据的treeData变量进行字符串化并想要显示它时,我只收到了根节点的字符串化。这是我的代码:如何将循环JSON对象字符串化并将其保存到文件?

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

另外我不知道为什么键被设置为“children”。 我的JSON文件结构:

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

在序列化对象时,您特别排除了“children”属性,您如何期望结果不是只有没有'children'属性的根节点? – Guffa

+0

你说得对。 js var中的对象结构与我加载的json文件不同。我只是将“孩子”改为“父母”,并且工作正常。它提前一刻我看到你的答案,但谢谢! – Nojas

回答

0

问题是,使用树数据将返回一个循环和循环数据错误。切换键从“孩子”到“父母”给了一个JSON,没有提及父母并正常工作。

2

您的对象children关键字面所以它传递给回调,然后由于某种原因你正在返回undefined,这将删除其结果是关键。

0

如果我理解正确,你正在努力实现的目标的字符串化结构为:

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] } 
相关问题