我正在处理以下复杂的问题:
ObjectA {
somearr: [
ObjectB {
somevar: ObjectD {...},
somecircularvar: pointer
},
ObjectC {...},
...
],
someobj: ObjectE {
someothercircularvar: pointer,
somevar: ObjectF {...}
},
someMethod: ...
}上述对象具有以下内容:
主要问题:如何将此object转换为存储的string,以及如何使用现有的所有方法和变量将string解析回object?
我试过的东西
在尝试了这些之后,我看到所有的“解决方案”都处理循环和嵌套对象,而不是用户定义的对象。
我确实记得尝试过其他几个库,但是没有一个库能够同时处理循环、嵌套和用户定义的对象。
我得到的最接近的解析如下:
{
somearr: [
{
somevar: {...},
somecircularvar: pointer
},
{...},
...
],
someobj: {
someothercircularvar: pointer, // Circular pointer conserved
somevar: {...}
}
}注意我的对象名称是如何消失的,现在每个__proto__都是默认对象(不是本地类定义的对象),没有保存任何方法。
非常感谢能解决这个问题的人。
发布于 2018-12-10 04:58:44
是的,这有点像在序列化对象数据,而不是类数据。变量仍然存在,但是类的元内容(即方法)没有被保留。
一个解决方案可能是系列化。
serialijse是一个简单的JavaScript持久性框架,它克服了JSON持久性的两个主要限制:
他们的第三个例子证明了你的情况:
// 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();https://stackoverflow.com/questions/53699322
复制相似问题