gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 10:57:49 25 4
gpt4 key购买 nike

我正在处理以下复杂对象:

ObjectA {
somearr: [
ObjectB {
somevar: ObjectD {...},
somecircularvar: pointer
},
ObjectC {...},
...
],
someobj: ObjectE {
someothercircularvar: pointer,
somevar: ObjectF {...}
},
someMethod: ...
}

上述对象具有以下内容:

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

主要问题:如何将这个object转化为string进行存储,以及如何解析string 回到 object 中,所有的方法和变量都保持原样?


我尝试过的事情:

  • 图书馆
    • 扁平化.js
    • Cyro.js
    • JSONfn.js
  • 搜索
    • 现有的 Stack Overflow 问题(似乎没有一个能解决我的怪癖)
    • Google 搜索用户定义对象的序列化(这些无法处理循环)

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

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

我最接近的是以下解析:

{
somearr: [
{
somevar: {...},
somecircularvar: pointer
},
{...},
...
],
someobj: {
someothercircularvar: pointer, // Circular pointer conserved
somevar: {...}
}
}

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

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

最佳答案

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

一个解决方案可能是 serialijse .

serialijse is an simple persistence framework for JavaScript that overcomes two main limitation of JSON persistence:

  • serialijse deals well with cyclic objects.
  • serialijse preserve object class upon deserialization.

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

// 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();

关于javascript - 在javascript中将复杂的、嵌套的、用户定义的对象序列化为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53699322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com