2014-11-20 77 views
0

我希望能夠將對象作爲代碼存儲在mongo數據庫中。 主要問題是當試圖存儲包含類型的array .. 示例:[String, Array'some','hello world']。 保存和獲取文檔時,我會得到序列化Javascript代碼

Doc.array = [undefined, undefined, 'some', 'hello world'] 

有沒有辦法序列化陣列它的自我並將其保存在蒙戈? 喜歡的東西:

var S = require('serializer'); 
var obj = { 
    cons: [[String, 'some', 'somemore']], 
    func: function(param, param2){ 
     param2.some = 'bla'; 
    } 
}; 

var objs = S.serializer(obj); 

//Store that serialized obj as a value for binary key or buffer key in mongo.. 
// then when getting the document... 

var obj = S.deserialize(objs); 
// being obj the exactly same object with the array and the function. 

有沒有辦法做到這一點,還是有不同的/更好的辦法?

編輯

我只是需要一種方法來存儲一個nools規則,所以問題是,規則的約束結構如下:

[FactType, 'alias', 'conditions'] 

凡FactType可能是字符串,對象,自定義。

+0

'String'是(或者說,是指)的功能。你想要在Mongo中存儲什麼? – 2014-11-20 17:03:21

+0

@ T.J.Crowder看看我的編輯。如果有一種方法來序列化,但保留字符串只是爲了引用,而不是它自己的字符串函數,那將會很棒。 – rahpuser 2014-11-20 17:19:42

回答

2

如果它只是一個JSON可以在字符串化一個JSON:

var text=JSON.stringify(obj); 

和解析傑森再次被解析:

var myVar=JSON.parse(text);

如果您有功能於一體的對象使用該序列化:

function objToString(obj, ndeep) { 
    switch(typeof obj){ 
    case "string": return '"'+obj+'"'; 
    case "function": return obj.name || obj.toString(); 
    case "object": 
     var indent = Array(ndeep||1).join('\t'), isArray = Array.isArray(obj); 
     return ('{['[+isArray] + Object.keys(obj).map(function(key){ 
      return '\n\t' + indent +(isArray?'': key + ': ')+ objToString(obj[key], (ndeep||1)+1); 
     }).join(',') + '\n' + indent + '}]'[+isArray]).replace(/[\s\t\n]+(?=(?:[^\'"]*[\'"][^\'"]*[\'"])*[^\'"]*$)/g,''); 
    default: return obj.toString(); 
    } 
} 

序列化:

var text=objToString(obj); //To Serialize Object 

結果:

"{cons:[[String,"some","somemore"]],func:function(param,param2){param2.some='bla';}}" 

反序列化:

Var myObj=eval('('+text+')');//To UnSerialize 

結果:

Object {cons: Array[1], func: function, spoof: function}