javascript - 如何保存带有循环引用的对象?

标签 javascript json serialization storage circular-reference

我想在本地保存一个具有循环引用的对象。我有哪些选择?

我的第一个想法是使用 HTML5 本地存储,但由于循环引用,我无法将此对象字符串化。

具体来说,我正在尝试保存当前选择的 DOMSelection 对象。

例子:

  var sel = window.getSelection();
  var selstring = JSON.stringify(sel); // Breaks here ...
  localStorage.setItem("selection",selstring);

我现在可以让 stringify 工作的唯一方法是像这样忽略某些对象:

var selstring = JSON.stringify(sel,function(k,v){
    if( k=="anchorNode" ||
        k=="baseNode" ||
        k=="extentNode" ||
        k=="focusNode") return undefined;

    return v;
});

但这给我留下了一个相当空的 DOMSelection 对象,它不足以满足我的需要。

有没有其他方法可以保存这个对象?唯一的要求是它在移动 safari 中运行,其他任何事情都可以。解决方案可以是 javascript 或 jquery(如果需要,也可以是任何其他 js 库)。

感谢您提供的任何帮助。

最佳答案

查看 Crockford's JSON-JS GitHub repo .它有一个文件,cycle.js,据说可以将循环引用的对象转换为 JSON,然后使用 JSONPath 返回。请参阅存储库的自述文件和文件注释中的最后一段。

关于javascript - 如何保存带有循环引用的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7420597/

相关文章:

javascript - 按字符串值排序并打印成 HTML

c++ - 脚本到二进制转换和对象序列化

javascript - 如何动态更改悬停和按下的 extjs 按钮的背景

javascript - 在组件状态和 props 中使用相同的变量名和 redux,我得到未定义的 props 错误

javascript - 在javascript中排序之前排除特定的数组对象

python - 使用python3将json数据转换为csv但不起作用

java - 如何从异步任务中的 JSON 查询返回多个字符串?

c++ - 位域赋值——安全吗?

serialization - 如何在二进制编码文件中的不同记录之间添加分隔符?

javascript - 同时访问变量