将JavaScript对象序列化为JSON字符串

Kal*_*ico 54 javascript json constructor

我有这个JavaScript原型:

Utils.MyClass1 = function(id, member) {
this.id = id;
this.member = member;
}
Run Code Online (Sandbox Code Playgroud)

我创建了一个新对象:

var myobject = new MyClass1("5678999", "text");
Run Code Online (Sandbox Code Playgroud)

如果我做:

console.log(JSON.stringify(myobject));
Run Code Online (Sandbox Code Playgroud)

结果是:

{"id":"5678999", "member":"text"}
Run Code Online (Sandbox Code Playgroud)

但我需要将对象的类型包含在JSON字符串中,如下所示:

"MyClass1": { "id":"5678999", "member":"text"} 
Run Code Online (Sandbox Code Playgroud)

有没有一种快速的方法来使用框架或其他东西?或者我是否需要toJson()在类中实现一个方法并手动执行?

Jak*_*cki 70

var myobject = new MyClass1("5678999", "text");
var dto = { MyClass1: myobject };
console.log(JSON.stringify(dto));
Run Code Online (Sandbox Code Playgroud)

编辑:

JSON.stringify将字符串化您班级的所有 "属性".如果您只想保留其中一些,可以单独指定它们,如下所示:

var dto = { MyClass1: {
    property1: myobject.property1,
    property2: myobject.property2
}};
Run Code Online (Sandbox Code Playgroud)


MSS*_*MSS 12

这只是JSON?你可以stringify()JSON:

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

var text = JSON.stringify(obj);
Run Code Online (Sandbox Code Playgroud)

并再次解析回JSON parse():

var myVar = JSON.parse(text);
Run Code Online (Sandbox Code Playgroud)

如果对象中有函数,请使用此函数序列化:

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();
  }
}
Run Code Online (Sandbox Code Playgroud)

例子:

连载:

var text = objToString(obj); //To Serialize Object
Run Code Online (Sandbox Code Playgroud)

结果:

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

反序列化:

Var myObj = eval('('+text+')');//To UnSerialize 
Run Code Online (Sandbox Code Playgroud)

结果:

Object {cons: Array[1], func: function, spoof: function}
Run Code Online (Sandbox Code Playgroud)