如何字符串化循环 JSON 对象并将其保存到文件?
How to stringify circular JSON object and save it to file?
我正在使用 d3.js 和 jquery 在 javascript 中绘制径向树图。我使用 json 文件将数据加载到 javascript 变量中。在绘制图表并进行一些更改后,例如更改某些节点的父级,我想将数据字符串化并另存为 json 文件。当我对包含所有 json 数据的 treeData 变量进行字符串化并想显示它时,我只收到字符串化的根节点。这是我的代码:
var json = JSON.stringify(treeData.children, function(key,value){
if(key == "children"){
return undefined;
}
return value;
});
alert("Json: " + json);
另外我也不知道为什么key设置为"children"。
我的 JSON 文件结构:
{
"name": "root",
"children": [
{
"name": "child1",
"children": [ ... ]
}
]
}
你的对象字面量中有一个 children
键,所以它被传递给回调,然后由于某种原因你返回未定义,这将从结果中删除该键。
如果我理解正确,您正在尝试实现结构化对象的字符串化:
var obj = {};
obj.circle = obj;
var str = JSON.stringify(obj);
// → Error
此对象将 return 错误 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] }
问题是使用树数据会return出现循环和循环数据错误。将键从 "children" 切换到 "parent" 会得到一个 json 而不引用 parents 并正常工作。
Circular JSON 可以使用以下方法将对象字符串化并保存:
import stringify from 'json-stringify-safe';
import fs from 'fs';
const content = stringify(myCircularJSONObject);
fs.writeFile('./data.json', content, ()=>{console.log('CREATED')});
我正在使用 d3.js 和 jquery 在 javascript 中绘制径向树图。我使用 json 文件将数据加载到 javascript 变量中。在绘制图表并进行一些更改后,例如更改某些节点的父级,我想将数据字符串化并另存为 json 文件。当我对包含所有 json 数据的 treeData 变量进行字符串化并想显示它时,我只收到字符串化的根节点。这是我的代码:
var json = JSON.stringify(treeData.children, function(key,value){
if(key == "children"){
return undefined;
}
return value;
});
alert("Json: " + json);
另外我也不知道为什么key设置为"children"。 我的 JSON 文件结构:
{
"name": "root",
"children": [
{
"name": "child1",
"children": [ ... ]
}
]
}
你的对象字面量中有一个 children
键,所以它被传递给回调,然后由于某种原因你返回未定义,这将从结果中删除该键。
如果我理解正确,您正在尝试实现结构化对象的字符串化:
var obj = {};
obj.circle = obj;
var str = JSON.stringify(obj);
// → Error
此对象将 return 错误 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] }
问题是使用树数据会return出现循环和循环数据错误。将键从 "children" 切换到 "parent" 会得到一个 json 而不引用 parents 并正常工作。
Circular JSON 可以使用以下方法将对象字符串化并保存:
import stringify from 'json-stringify-safe';
import fs from 'fs';
const content = stringify(myCircularJSONObject);
fs.writeFile('./data.json', content, ()=>{console.log('CREATED')});