[英]Storing Tree Structures in JSON
我正在尝试编写一个系统,其中客户端(基于浏览器)请求从服务器返回树(应用程序引擎,但这无关紧要)。 问题在于将树转换为JSON:因为每个对象都引用它下面的对象,所以在字符串化时,我得到一个非常长的字符串,该字符串在解析时会为每个子代创建新对象,而不是对其他节点的引用。
我当前的解决方案是编写一个“ equalTo”和“ toString”函数(将对象引用转换为字符串)以字符串化结果数组,然后在客户端通过将字符串解析为对象来重新创建它。 但是,该解决方案使我的算法算法感觉麻木,必须有更好的方法通过JSON返回此类结构!
编辑:我只是想到对象引用也可以转换为数组索引。 这是一个更好的解决方案,但是仍然有一些令人讨厌的错误代码。
EDIT2:是的,所以我想然后是一些伪代码。
var node = {
children : null;
};
var root = Object.create(node);
var level1a = Object.create(node);
var level1b = Object.create(node);
var level2a = Object.create(node);
var level2b = Object.create(node);
root.children = [level1a, level1b];
level1a.children = [level2a, level2b];
因此,您最终得到了一棵看起来像这样的树: stackoverflow不会让我发布图像
如果您有寻址节点的方法,则可以使用JSON Reviver和替换器在地址和引用之间进行转换。
例如,如果您有两个功能,例如
function addressForNode(node) { ... }
function nodeForAddress(address) { ... }
您可以使用reviver和replacers在解析或字符串化时调用它们
var jsonString = JSON.stringify(tree, function (key, value) {
if (typeof value === 'object') {
var address = addressForNode(value);
if (address !== null) { // value really is a node
return { address: address }
}
}
return value;
});
// And to parse...
var tree = JSON.parse(jsonString, function (key, value) {
if (typeof value === 'object' && typeof value.address === 'string') {
return nodeForAddress(value.address);
}
return value;
});
如果可以帮助您,请不要将自己局限于JSON。 而是考虑根据需要使用JSONP技术生成通过链接脚本包含的JavaScript代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.