2012-03-27 27 views
1

Betrachten Sie die folgende verschachtelte JSON:JQuery JSON-in-JSON Parsen

{ 
    "state": [ 
    "Tennessee" 
    ], 
    "more_data": [ 
    { 
     "letters": { 
     "last": "e", 
     "first": "T" 
     } 
    } 
    ] 
} 

ich die JSON in JavaScript in einer flachen Weise, dh root_key = Wert drucken möchten:

var my_json_str = "{\"state\":[\"Tennessee\"],\"more_data\":[{\"letters\":{\"first\":\"T\",\"last\":\"e\"}}]}"; 
    console.log(my_json_str); 
    my_json = jQuery.parseJSON(my_json_str); 
    for (var key in my_json) { 
     console.log(key,":",my_json[key]); 
    } 

Aber ich erhalten (Firebug-Konsole):

state : ["Tennessee"] 
more_data : [Object { letters={...}}] 

Statt der gewünschten:

state:["Tennessee"] 
more_data:[{"letters":{"first":"T","last":"e"}}] 

Wie behebe ich das?

Lösung - im Anschluss an Ihre Antworten:

http://jsfiddle.net/wrAUB/

var jsonStr = "{\"state\":[\"Tennessee\"],\"more_data\":[{\"letters\":{\"first\":\"T\",\"last\":\"e\"}}]}"; 

var jsonObj = JSON.parse(jsonStr); 
for (key in jsonObj) { 
    console.log(key+':'+JSON.stringify(jsonObj[key])); 
} 
​ 

Welche gibt:

state:"Tennessee" 
more_data:{"letters":{"first":"T","last":"e"}} 
+3

** Sie don‘ Ich muss etwas reparieren, es gibt nichts falsches ** (naja, es sei denn, Sie wollen es wirklich auf andere Weise drucken, aber warum?). So zeigt Firebug verschachtelte Objekte an. Sie können mit den Daten wie erwartet arbeiten. Übrigens, Sie haben kein JSON in JSON. Sie haben nur JSON (JSON in JSON wäre etwas wie '{" foo ":" {\ "bar \": 42} "}', d. H. Eine Zeichenfolge, die JSON enthält). –

+0

Dies ist ein Druckproblem, kein Analyseproblem. –

+0

Erinnert mich an die alten Infomercials ...: "Entschuldigung, Tennessee." – lance

Antwort

1

Klingt wie Sie JSON.stringify auf den Werten des Schlüssels nennen möchte -Wertpaare.

+0

+1 Großartig, das ist, was ich gesucht habe. –

4

können Sie JSON.stringify verwenden, um die Objekte drehen Sie über wieder in JSON-Strings sind Iterieren:

var jsonStr = "{\"state\":[\"Tennessee\"],\"more_data\":[{\"letters\":{\"first\":\"T\",\"last\":\"e\"}}]}"; 

​var jsonObj = JSON.parse(jsonStr); 
for (key in jsonObj) { 
    console.log(key+':'+JSON.stringify(jsonObj[key])); 
} 

Sehen sie in Aktion auf jsFiddle: http://jsfiddle.net/hEvFr/

+0

+1 Für jsFiddle! Es rockt. –