我正在处理以下复杂对象:
ObjectA {
somearr: [
ObjectB {
somevar: ObjectD {...},
somecircularvar: pointer
},
ObjectC {...},
...
],
someobj: ObjectE {
someothercircularvar: pointer,
somevar: ObjectF {...}
},
someMethod: ...
}
以上对象具有以下内容:
主要问题:如何将此object
转换为string
进行存储,以及如何将string
解析回{{1 }}照原样使用所有方法和变量?
我尝试过的事情:
尝试这些之后,我看到所有“解决方案”都处理圆形和嵌套对象,而不是用户定义的对象。
我确实记得尝试过其他两个库,但是没有一个库可以同时处理圆形,嵌套和用户定义的对象。
我最接近的是以下解析:
object
请注意我的对象名称是如何消失的,并且每个{
somearr: [
{
somevar: {...},
somecircularvar: pointer
},
{...},
...
],
someobj: {
someothercircularvar: pointer, // Circular pointer conserved
somevar: {...}
}
}
现在都是默认对象(不是我的本地类定义的对象),并且我的方法都没有保留。
在此先感谢能够解决此问题的人。
答案 0 :(得分:2)
对,所以这就像您要序列化 object 数据,而不是序列化 class 数据。变量仍然存在,但是关于类的元数据(即方法)并未保留。
一个解决方案可能是serialijse。
serialijse是一个简单的JavaScript持久性框架,它克服了JSON持久性的两个主要限制:
- serialijse处理循环对象很好。
- serialijse在反序列化时保留对象类。
他们的第三个示例演示了您的情况:
// 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();