【问题标题】:deserialize JSON to JAVASCRIPT object [duplicate]将 JSON 反序列化为 JAVASCRIPT 对象 [重复]
【发布时间】:2011-12-23 18:47:11
【问题描述】:

我有一个将 JSON 文本反序列化为 javascript 对象的问题,我测试 jquery 和 yui 库,我有这个类:

function Identifier(name, contextId) {
    this.name = name;
    this.contextId = contextId;
}

Identifier.prototype.setName = function(name) {
    this.name = name;
}

Identifier.prototype.getName = function() {
    return this.name;
}

Identifier.prototype.setContextId = function(contexId) {
    this.contextId= contexId;
}

Identifier.prototype.getContextId = function() {
    return this.contextId;
}

我有这个 JSON:

{
"Identifier": { 
   "name":"uno",
   "contextId":"dos"}
}

我想解析创建一个Identifier对象,我的问题是这句话:

var obj = jQuery.parseJSON('{"Identifier": { "name":"uno","contextId":"dos"}}');

var obj2 = JSON.parse('{"Identifier": { "name":"uno","contextId":"dos"}}');

不工作,var obj 和 obj2 不是 Identifier 对象,我该如何解析它? 谢谢

这个问题不是重复的,因为它比迈克尔标记为重复的问题早了 5 年

【问题讨论】:

  • 您不能使用 json 创建 Identifier 对象,您可以创建具有相同数据结构的对象字面量,但这些函数都不起作用。您可以做的是在获得 json 后将它们添加到文字中,使其像 Indentifier 对象一样工作。
  • fromJson 方法添加到Identifier 并相应地解析和处理JSON 以创建一个新的Identifier 实例。
  • 或者,您可以在使用 JSON.parse 时使用“reviver”函数参数,该参数将为您的字符串化 json 字符串的每个属性调用。在该 reviver 函数中,您可以在适当的时间创建一个 Identifier 对象,即在解析最后一个属性时。 MDN上有几个例子。

标签: javascript json


【解决方案1】:

您可以创建一个函数来为您初始化这些对象。这是我快速起草的:

function parseJSONToObject(str) {
    var json = JSON.parse(str);

    var name = null;
    for(var i in json) { //Get the first property to act as name
        name = i;
        break;
    }

    if (name == null)
        return null;

    var obj = new window[name]();
    for(var i in json[name])
        obj[i] = json[name][i];

    return obj;
}

这将创建一个由第一个属性的名称表示的类型的对象,并根据第一个属性的对象的属性为其分配值。你可以这样使用它:

var identifier = parseJSONToObject('{"Identifier": { "name":"uno","contextId":"dos"}}');
console.log(identifier);

Live example

【讨论】:

    猜你喜欢
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    相关资源
    最近更新 更多