首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将复杂、嵌套的用户定义对象序列化为javascript中的字符串。

问将复杂、嵌套的用户定义对象序列化为javascript中的字符串。
EN

Stack Overflow用户
提问于 2018-12-10 03:59:21
回答 1查看 1K关注 0票数 3

我正在处理以下复杂的问题:

代码语言:javascript
复制
ObjectA {
    somearr: [
        ObjectB {
           somevar: ObjectD {...},
           somecircularvar: pointer
        },
        ObjectC {...},
        ...
    ],
    someobj: ObjectE {
        someothercircularvar: pointer,
        somevar: ObjectF {...}
    },
    someMethod: ...
}

上述对象具有以下内容:

  • 嵌套对象
  • 循环引用对象中的许多位置(不仅仅是主引用)
  • 用户定义对象

主要问题:如何将此object转换为存储的string,以及如何使用现有的所有方法和变量将string解析回object?

我试过的东西

  • 图书馆
    • Flatted.js
    • Cyro.js
    • JSONfn.js

​

  • 搜索
    • 现有的堆栈溢出问题(似乎没有处理我的怪物)
    • Google搜索用户定义对象的序列化(这些对象不能处理循环)

​

在尝试了这些之后,我看到所有的“解决方案”都处理循环和嵌套对象,而不是用户定义的对象。

我确实记得尝试过其他几个库,但是没有一个库能够同时处理循环、嵌套和用户定义的对象。

我得到的最接近的解析如下:

代码语言:javascript
复制
{
    somearr: [
        {
           somevar: {...},
           somecircularvar: pointer
        },
        {...},
        ...
    ],
    someobj: {
        someothercircularvar: pointer, // Circular pointer conserved
        somevar: {...}
    }
}

注意我的对象名称是如何消失的,现在每个__proto__都是默认对象(不是本地类定义的对象),没有保存任何方法。

非常感谢能解决这个问题的人。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-10 04:58:44

是的,这有点像在序列化对象数据,而不是类数据。变量仍然存在,但是类的元内容(即方法)没有被保留。

一个解决方案可能是系列化。

serialijse是一个简单的JavaScript持久性框架,它克服了JSON持久性的两个主要限制:

  • serialijse很好地处理循环对象。
  • 序列化在反序列化时保留对象类。

他们的第三个例子证明了你的情况:

代码语言:javascript
复制
// serializing an object with cyclic dependencies
function testing_javascript_serialization_objects_with_cyclic_dependencies() {

    var Mary = { name: "Mary", friends: [] };
    var Bob = { name: "Bob", friends: [] };

    Mary.friends.push(Bob);
    Bob.friends.push(Mary);

    var group = [ Mary, Bob];
    console.log(group);

    // testing serialization using  JSON.stringify/JSON.parse
    try {
        var jstr = JSON.stringify(group);
        var jo = JSON.parse(jstr);
        console.log(jo);

    } catch (err) {
        console.log(" JSON has failed to manage object with cyclic deps");
        console.log("  and has generated the following error message", err.message);
    }

    // now testing serialization using serialijse  serialize/deserialize
    var str = s.serialize(group);
    var so = s.deserialize(str);
    console.log(" However Serialijse knows to manage object with cyclic deps !");
    console.log(so);
    assert(so[0].friends[0] == so[1]); // Mary's friend is Bob
}
testing_javascript_serialization_objects_with_cyclic_dependencies();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53699322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档