繁体   English   中英

在JSON中存储树结构

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM