首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将JavaScript对象序列化为JSON字符串

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

Stack Overflow用户
提问于 2011-11-17 17:26:56
回答 8查看 181.8K关注 0票数 68

我有一个JavaScript原型:

代码语言:javascript
运行
复制
Utils.MyClass1 = function(id, member) {
this.id = id;
this.member = member;
}

然后我创建了一个新对象:

代码语言:javascript
运行
复制
var myobject = new MyClass1("5678999", "text");

如果我这样做了:

代码语言:javascript
运行
复制
console.log(JSON.stringify(myobject));

结果是:

代码语言:javascript
运行
复制
{"id":"5678999", "member":"text"}

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

代码语言:javascript
运行
复制
"MyClass1": { "id":"5678999", "member":"text"} 

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

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-11-17 17:30:14

代码语言:javascript
运行
复制
var myobject = new MyClass1("5678999", "text");
var dto = { MyClass1: myobject };
console.log(JSON.stringify(dto));

编辑:

JSON.stringify会将你的类的所有属性“”字符串化。如果你只想持久化其中的一部分,你可以像这样单独指定它们:

代码语言:javascript
运行
复制
var dto = { MyClass1: {
    property1: myobject.property1,
    property2: myobject.property2
}};
票数 82
EN

Stack Overflow用户

发布于 2014-11-21 14:22:06

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

代码语言:javascript
运行
复制
var obj = {
    cons: [[String, 'some', 'somemore']],
    func: function(param, param2){
        param2.some = 'bla';
    }
};

var text = JSON.stringify(obj);

并使用parse()再次解析回JSON。

代码语言:javascript
运行
复制
var myVar = JSON.parse(text);

如果对象中有函数,请使用以下代码进行序列化:

代码语言:javascript
运行
复制
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();
  }
}

示例:

序列化:

代码语言:javascript
运行
复制
var text = objToString(obj); //To Serialize Object

结果:

代码语言:javascript
运行
复制
"{cons:[[String,"some","somemore"]],func:function(param,param2){param2.some='bla';}}"

反序列化:

代码语言:javascript
运行
复制
Var myObj = eval('('+text+')');//To UnSerialize 

结果:

代码语言:javascript
运行
复制
Object {cons: Array[1], func: function, spoof: function}
票数 16
EN

Stack Overflow用户

发布于 2011-11-17 18:23:49

元素的类型不是标准序列化的,所以您应该手动添加它。例如

代码语言:javascript
运行
复制
var myobject = new MyClass1("5678999", "text");
var toJSONobject = { objectType: myobject.constructor, objectProperties: myobject };
console.log(JSON.stringify(toJSONobject));

祝好运!

编辑:将typeof更改为正确的.constructor。有关对象的构造函数属性的详细信息,请参见https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/constructor

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8164802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档