2011-11-07 59 views
9

我有一個問題要反序列化JSON文本的JavaScript對象,我測試的jQuery和YUI庫,我有這個類:反序列化JSON JavaScript對象

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"} 
} 

我想解析創建標識對象,我的問題是這樣的句子:

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

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

不工作,var obj和obj2不是標識符對象,我該如何解析? 感謝

這個問題是不重複的,因爲它比作爲複製

+0

不能創建使用JSON的'Identifier'對象,你可以創建功能的對象常量相同的數據結構,但沒有人會工作。你可以做的就是將它們添加到文字中,讓它在獲得json之後像「Indentifier」對象那樣工作。 –

+1

將'fromJson'方法添加到'Identifier'並相應地解析和處理JSON以創建一個新的'Identifier'實例。 –

+0

或者,您可以在使用'JSON.parse'時使用'reviver'函數參數,這將針對字符串化json字符串的每個屬性進行調用。在這個'reviver'函數中,你可以在適當的時候創建一個Identifier對象,即當最後一個屬性被解析時。 [MDN]上有幾個例子(https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse)。 –

回答

9

您可以創建一個初始化這些對象爲您的函數,邁克爾標誌着問題之前5年。這裏有一個我起草很快:

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