[英]How to stringify circular JSON object and save it to file?
I'm working on a radial tree diagram in javascript using d3.js and jquery.我正在使用 d3.js 和 jquery 在 javascript 中处理径向树图。 I use json files to load data into a javascript var.我使用 json 文件将数据加载到 javascript var 中。 After working on a diagram and making some changes, eg changing parent of some nodes, I want to stringify data and save as a json file.在处理图表并进行一些更改后,例如更改某些节点的父节点,我想对数据进行字符串化并另存为 json 文件。 When I stringify treeData variable, which includes all json data, and wanted to display it, I receive only the root node stringified.当我将包含所有 json 数据的 treeData 变量字符串化并想要显示它时,我只收到字符串化的根节点。 This is my code:这是我的代码:
var json = JSON.stringify(treeData.children, function(key,value){
if(key == "children"){
return undefined;
}
return value;
});
alert("Json: " + json);
Also I don't know why the key is set to "children".我也不知道为什么将键设置为“儿童”。 My JSON file structure:我的 JSON 文件结构:
{
"name": "root",
"children": [
{
"name": "child1",
"children": [ ... ]
}
]
}
您的对象文字中有一个children
键,因此它被传递给回调,然后由于某种原因您返回 undefined,这将从结果中删除该键。
Circular JSON Objects can be stringified and saved with the following approach:可以使用以下方法对圆形 JSON 对象进行字符串化和保存:
import stringify from 'json-stringify-safe';
import fs from 'fs';
const content = stringify(myCircularJSONObject);
fs.writeFile('./data.json', content, ()=>{console.log('CREATED')});
If I understand correctly you are trying to achieve stringifying of an object structured as:如果我理解正确,您正在尝试实现对结构化对象的字符串化:
var obj = {};
obj.circle = obj;
var str = JSON.stringify(obj);
// → Error
This object will return an error with JSON.stringify although is otherwise valid.尽管在其他方面有效,但此对象将返回 JSON.stringify 错误。 If you don't mind the readability of the stringified object, I suggest using CircularJSON :如果您不介意字符串化对象的可读性,我建议使用CircularJSON :
Install when using Node.js:使用 Node.js 时安装:
npm install --save circular-json
Install for web:为网络安装:
<script src="build/circular-json.js"></script>
And usage:和用法:
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] }
The problem is that using tree data will return with a loop and circular data error.问题是使用树数据将返回循环和循环数据错误。 Switching key from "children" to "parent" give a json without references to the parents and work properly.将键从“子级”切换到“父级”给出一个 json 而不引用父级并且正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.