如何将循环JSON对象字符串化并将其保存到文件中?

时间:2015-01-11 21:52:01

标签: javascript jquery json d3.js stringify

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

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": [ ... ]
  }
 ]
}

4 个答案:

答案 0 :(得分:3)

你的对象文字中有一个children键,因此它被传递给callBack,然后由于某种原因你返回undefined,这将从结果中删除该键。

答案 1 :(得分: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] }

答案 2 :(得分:0)

问题是使用树数据将返回循环和循环数据错误。将密钥从“children”切换到“parent”会给json提供不引用父项并正常工作的信息。

答案 3 :(得分:0)

import stringify from 'json-stringify-safe';
import fs from 'fs';

const content = stringify(whatever);
fs.writeFile('./data.json', content, ()=>{console.log('CREATED')});