2011-11-07 18 views
9

mam pytanie do deserializowania tekst JSON do JavaScript Object, przetestować jQuery i biblioteki YUI, mam tej klasy:Cofnięcie JSON do obiektu 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; 
} 

i mam ten JSON:

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

Chcę parse utworzyć obiekt Identifier, moim problemem jest to, że zdania:

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

lub

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

Nie działa, var obj i obj2 nie są obiektami Identyfikatora, jak mogę je przeanalizować? Dzięki

To pytanie nie jest duplikatem, ponieważ powstał 5 lat wcześniej niż pytanie, które Michał Marks jako powielone

+0

Nie można utworzyć obiekt 'Identifier' z JSON, można utworzyć obiekt dosłowne z tej samej struktury danych, ale żadna z funkcji będzie praca. Możesz dodać je do literału, aby działał jak obiekt 'Indentifier' po uzyskaniu json. –

+1

Dodaj metodę 'fromJson' do' Identyfikatora' i parsuj i przetwarzaj JSON, aby utworzyć nową instancję 'Identifier'. –

+0

Alternatywnie, możesz użyć parametru funkcji "reviver" podczas używania 'JSON.parse', który byłby wywoływany dla każdej właściwości twojego napisu json. Z poziomu tej funkcji 'reviver' można utworzyć obiekt' Identifier' w odpowiednim czasie, tj. Podczas analizowania ostatniej właściwości. Jest kilka przykładów na [MDN] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse). –

Odpowiedz

9

Można utworzyć funkcję, która inicjuje te obiekty dla Ciebie. Oto jeden szybko zredagowany:

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

ten tworzy obiekt typu reprezentowanego przez nazwę pierwszego atrybutu, i przypisuje to według wartości atrybutów obiektu pierwszego atrybutu. Można używać go tak:

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

Live example

Powiązane problemy