[英]Serializing a complex, nested, user-defined object into a string in javascript
我正在使用以下復雜的對象:
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__
現在都是默認對象(不是我的本地類定義的對象),我的方法都沒有被保存。
非常感謝能夠解決這個問題的人。
是的,所以有點像你在序列化對象數據,而不是類數據。 變量仍然存在,但關於類的元數據(即方法 )沒有被保留。
一種解決方案可能是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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.