2010-09-15 26 views
16

¿Existe alguna manera de manejar las estructuras de datos utilizando el objeto JSON de forma de pares clave/valor?
Si es así, alguien puede elaborar la forma de acceso a objetos de valor asociado a la clavePares de valores clave usando JSON

Supongamos que tengo algo como esto

KEY1 | VALUE OBJECT1 - (NAME: "XXXXXX", VALUE:100.0) 
KEY2 | VALUE OBJECT2 - (NAME: "YYYYYYY", VALUE:200.0) 
KEY3 | VALUE OBJECT3 - (NAME: "ZZZZZZZ", VALUE:500.0) 
+3

JASON? o te refieres a JSON? – Reigel

+0

https://www.youtube.com/watch?v=0cgOti7gLus – Shufflepants

Respuesta

19

Un "objeto JSON" es en realidad un oxímoron. JSON es un formato de texto que describe un objeto, no un objeto real, por lo que los datos pueden tener forma de JSON o deserializarse en un objeto.

El JSON para que se vería así:

{"KEY1":{"NAME":"XXXXXX","VALUE":100},"KEY2":{"NAME":"YYYYYYY","VALUE":200},"KEY3":{"NAME":"ZZZZZZZ","VALUE":500}} 

Una vez que haya analizado el JSON en un objeto de JavaScript (llamado data en el código de abajo), puede por ejemplo tener acceso al objeto de KEY2 y es propiedades similares:

var obj = data.KEY2; 
alert(obj.NAME); 
alert(obj.VALUE); 

Si usted tiene la llave como una cadena, puede utilizar índice de notación:

var key = 'KEY3'; 
var obj = data[key]; 
+2

JSON es un acrónimo. Llamar a una instancia un "objeto JSON" lo convierte en una referencia bastante clara y sucinta. Ciertamente no es un "oxímoron" por ninguna definición aceptada de "oxímoron". Que los objetos JavaScript y JSON no son lo mismo es claro: la notación de objetos JavaScript es una "notación", no un objeto JavaScript. ¿Es un "objeto" JSON? Claro que lo es. –

10
var object = { 
    key1 : { 
     name : 'xxxxxx', 
     value : '100.0' 
    }, 
    key2 : { 
     name : 'yyyyyyy', 
     value : '200.0' 
    }, 
    key3 : { 
     name : 'zzzzzz', 
     value : '500.0' 
    }, 
} 

Si esa es la apariencia de su objeto y desea repetir cíclicamente cada nombre y valor, entonces trataría de hacer algo como.

$.each(object,function(key,innerjson){ 
    /* 
     key would be key1,key2,key3 
     innerjson would be the name and value ** 
    */ 

    //Alerts and logging of the variable. 
    console.log(innerjson); //should show you the value  
    alert(innerjson.name); //Should say xxxxxx,yyyyyy,zzzzzzz 
}); 
+0

La función $ .each funciona muy bien para esto. – skwidbreth

7

JSON (= J ava S cript O bject N flotación), es un mecanismo ligero y rápido para convertir objetos de Javascript en una cadena y viceversa.

Dado que los objetos de Javascripts consisten en key/value pares, es muy fácil de usar y accede a JSON de esa manera.

Así que si tenemos un objeto:

var myObj = { 
    foo: 'bar', 
    base: 'ball', 
    deep: { 
     java: 'script' 
    } 
}; 

podemos convertir esto en una cadena llamando window.JSON.stringify(myObj); con el resultado de "{"foo":"bar","base":"ball","deep":{"java":"script"}}".

Al revés, llamaríamos al window.JSON.parse("a json string like the above");.

JSON.parse() devuelve un objeto/matriz javascript en caso de éxito.

alert(myObj.deep.java); // 'script' 

window.JSON no es nativa disponible en todos los navegadores. Algunos navegadores "antiguos" necesitan un pequeño complemento de JavaScript que ofrece la funcionalidad mencionada anteriormente. Consulte http://www.json.org para obtener más información.

+0

Excelente publicación, aunque usar el analizador integrado de jQuery sería mejor ya que el OP ya está usando jQuery :) – RobertPitt

+0

@RobertPitt: El método '.parseJSON()' de jQuery solo hace algunas comprobaciones de expresiones regulares antes de intentar llamar a 'window.JSON .parse' en sí mismo. Desafortunadamente, no existe el método jQuery 'to_json', por lo que aún tendría que jugar con' window.JSON.stringify'. – jAndy

3

Veo lo que está tratando de preguntar y creo que esta es la respuesta más simple a lo que está buscando, dado que es posible que no sepa cuántos pares de claves le están enviando.

simple llave estructura Par JSON

var data = { 
    'XXXXXX' : '100.0', 
    'YYYYYYY' : '200.0', 
    'ZZZZZZZ' : '500.0', 
} 

uso de código JavaScript para acceder a los pares de claves

for (var key in data) 
    { if (!data.hasOwnProperty(key)) 
    { continue; } 
    console.log(key + ' -> ' + data[key]); 
    }; 

salida de la consola debe tener este aspecto

XXXXXX -> 100.0 
YYYYYYY -> 200.0 
ZZZZZZZ -> 500.0 

Aquí hay un JSFiddle para mostrar cómo funciona.

Cuestiones relacionadas