2017-04-10 2 views
1

Ich habe 1 JavaScript-Objekt wie folgt aus:Wie alle JSON-Strings in einem JavaScript-Objekt analysieren

result = { 
    "status": "success", 
    "message": "Get successful!", 
    "data": { 
     "name":"Hello world", 
     "school": { 
      "name":"LHP", 
      "address":"HCM" 
     }, 
     "class": "[{\"text\":\"Math\",\"code\":\"math124\"},{\"text\":\"Libra\",\"code\":\"libra124\"}]", 
     "student": "{\"time_range\":{\"type\":\"select\",\"text\":\"Today\",\"value\":[{\"code\":\"in_today\",\"text\":\"In Today\"}]}}" 
    } 
} 

So habe ich Klasse und Schüler separat analysieren:

result.data.class = JSON.parse(result.data.class); 
result.data.student = JSON.parse(result.data.student); 

Gibt es andere Art und Weise zu die gesamte Ergebnisvariable analysieren oder diesen Schritt kürzer/besser machen?

Dank

+4

Es gibt nur einen richtigen Weg, dies zu tun: Stringieren Sie es nicht an erster Stelle. – str

+0

Das Problem an der Wurzel beheben: nicht an erster Stelle doppelt codieren. – deceze

+0

Müssen Sie JSON an einem beliebigen Ort automatisch erkennen, oder wird JSON immer unter den gleichen Schlüsseln sein? –

Antwort

0

Man könnte sie eine Schleife durch die Daten der Kinder Eigenschaft und analysieren.

for (var i = 0; i < Object.keys(result.data).length; i++) { 
    try { 
     result.data[Object.keys(result.data)[i]] = JSON.parse(result.data[Object.keys(result.data)[i]]); 
    } catch (error) {} // it's already JSON 
} 

Aber ich würde das nur tun, wenn Sie sicher sind, nur Sie jemals mit Zeichenfolge JSON in der data Eigenschaft des Objekts zu tun haben.

+0

'if (! IsJSON) {[...] JSON.parse (Element); } scheint sehr kontraintuitiv zu sein. – str

+0

'try {result [...] = JSON.parse (Element); } catch (e) {/ * shrug * /} 'wäre die viel direktere Art, eine Ausnahme zu verwenden ... – deceze

+0

Fair genug! Es war noch früh ... ;-) –

Verwandte Themen