2012-02-04 14 views
5

Tengo los siguientes datos json provenientes del servicio web que no es más que un diccionario serializado en json, ahora en el lado del cliente necesito analizar esto para iterar a través de las teclas de este json diccionario que usa javascript o jqueryanalizando el diccionario json en javascript para iterar a través de las claves

{ 
   "AboutToExpire": { 
      "Display": true, 
      "Message": "Several of your subscriptions are about to expire. <a id=\"lnkShowExpiringSubs\" href=\"#\">View subscriptions<\/a>" 
   }, 
   "Expired": { 
      "Display": true, 
      "Message": "Your McAfee WaveSecure - Tablet Edition subscription has expired and you’ve been without protection for 384 days. <a id=\"lnkNotificationRenewNow\" href=\"http://home.mcafee.com/root/campaign.aspx?cid=96035&pk=FAB37CF4-3680-4A87-A253-77E7D48BF6D7&affid=0\">Renew now<\/a>" 
   } 
} 
+0

haga el favor de hacerlo (datos JSON) legible por primera ?? – diEcho

+1

[¿Qué has probado?] (Http://mattgemmell.com/2008/12/08/what-have-you-tried/) Además, ¿cuál es tu pregunta? – nfechner

Respuesta

5
var s = '{"AboutToExpire":{"Display":true,"Message":"Several of your subscriptions are about to expire. \u003ca id=\"lnkShowExpiringSubs\" href=\"#\"\u003eView subscriptions\u003c/a\u003e"},"Expired":{"Display":true,"Message":"Your McAfee WaveSecure - Tablet Edition subscription has expired and you’ve been without protection for 384 days. \u003ca id=\"lnkNotificationRenewNow\" href=\"http://home.mcafee.com/root/campaign.aspx?cid=96035&pk=FAB37CF4-3680-4A87-A253-77E7D48BF6D7&affid=0\"\u003eRenew now\u003c/a\u003e"}}'; 

var data = eval(s); // this will convert your json string to a javascript object 

for (var key in data) { 
    if (data.hasOwnProperty(key)) { // this will check if key is owned by data object and not by any of it's ancestors 
     alert(key+': '+data[key]); // this will show each key with it's value 
    } 
} 
+1

'eval' se considera inseguro por un público amplio. La respuesta de @ shiplu.mokadd.im es la opción más segura. – nonsensickle

+1

Voto a favor de eval, tenga en cuenta que esta es una mala idea para los datos externos. – Jonathan

1

Parse it back to? Podría iterar sobre él como el objeto que es.

Decir que ha definido su objeto JSON como una variable a través de un cierre o algo, o por el bien de ejemplo, al igual que una variable codificada ... IE:

var myJSON = "{"AboutToExpire":{"Display":true,"Message":"Several of your subscriptions are about to expire. \u003ca id=\"lnkShowExpiringSubs\" href=\"#\"\u003eView subscriptions\u003c/a\u003e"},"Expired":{"Display":true,"Message":"Your McAfee WaveSecure - Tablet Edition subscription has expired and you’ve been without protection for 384 days. \u003ca id=\"lnkNotificationRenewNow\" href=\"http://home.mcafee.com/root/campaign.aspx?cid=96035&pk=FAB37CF4-3680-4A87-A253-77E7D48BF6D7&affid=0\"\u003eRenew now\u003c/a\u003e"}}" 

con jQuery de cada uno() que sólo puede iterar sobre él como.

$each(myJSON, function(x){document.print(myJSON.AboutToExpire[x].Message);`}); 
+0

Necesito verificar la clave y hacer alguna manipulación, por ejemplo, si la clave es AboutToExpire o alguna otra cosa, necesito aplicar alguna clase y para otras claves, otra clase sobre el valor que es Message en este caso – almighty

+0

Además myJSON.AboutToExpire está llegando como undefined – almighty

16

Uso JSON2.js

var obj = JSON.parse(data); 
for(var key in obj){ 
    if (obj.hasOwnProperty(key)){ 
     var value=obj[key]; 
     // work with key and value 
    } 
} 
+0

+1 para buena solución – diEcho

+1

Buena solución. Pero no es necesario que incluya JSON2.js a menos que esté buscando navegadores muy antiguos. Todos los navegadores actuales tienen parse() y stringify() compatibles de forma nativa. – techfoobar

+0

¿No debería cambiar 'if (obj.hasOwnProperty (clave)) {' y 'por (var clave en obj) {' por razones de rendimiento? – Neolisk

Cuestiones relacionadas