2011-11-07 19 views
9

tengo una pregunta para deserializar texto JSON a un objeto JavaScript, i probar jQuery y la biblioteca Yui, tengo esta clase:deserializar JSON al objeto 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; 
} 

y tengo esta JSON:

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

Quiero el análisis sintáctico crear un objeto identificador, mi problema es que esta frases:

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

o

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

No funciona, el var obj y obj2 no son un objeto Identificador, ¿cómo puedo analizar esto? Gracias

esta pregunta no es el duplicado, porque fue hecho 5 años antes de que la pregunta que marca como Michael duplicado

+0

No se puede crear un objeto 'Identifier' con JSON, puede crear un objeto literal con la misma estructura de datos pero ninguna de las funciones se trabajo. Lo que puede hacer es agregarlos al literal para que funcione como un objeto 'Indentifier' después de obtener el json. –

+1

Agregue un método 'fromJson' a' Identifier' y analice y procese el JSON en consecuencia para crear una nueva instancia 'Identifier'. –

+0

Alternativamente, podría usar un parámetro de función 'reviver' cuando use 'JSON.parse', que se invocaría para cada propiedad de su cadena json en cadena. Desde dentro de esa función 'reviver' puede crear un objeto' Identifier' en el momento apropiado, es decir, cuando se está analizando la última propiedad. Hay algunos ejemplos en [MDN] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse). –

Respuesta

9

Se puede crear una función que inicializa los objetos para usted. Aquí hay una rápida redacté:

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

Esto crea un objeto del tipo representado por el nombre del primer atributo, y asigna valores que es de acuerdo a los atributos del objeto del primer atributo. Se podría utilizar como esa:

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

Live example

Cuestiones relacionadas