2016-04-12 4 views
1

ich über das JSON-Objekt am Iterieren istWarum For- in Schleife wieder 'arg', wenn Schleife leer

Meine JSON Struktur so etwas wie diese

{ "someinfo": { "Parameter": { "ABC": "123", "xyz": "456"}}}

for (var tempVal in jsonObj.someinfo.Parameter) { 
//print tempval 

} 

obige Schleife wird korrekte Werte zurück, wenn 'Parameter' in JSON gefüllt ist.

Wenn es leer ist es arg

Leere 'Parameter' in JSON gedruckt werden wird wie folgt aussehen:

{ "someinfo": { "Parameter": ""}}}

um korrekte Werte zu drucken, wenn sie leer oder nicht leer gibt es eine Möglichkeit, in for- in Schleife

+0

Sprechen Sie über 'if' Bedingung? – Rayon

+0

Ich würde sagen, dass Ihr JSON-Parameter falsch ist. Es sollte ein Objekt oder null sein. Kein Objekt oder leere Zeichenfolge. – RvdK

+0

Ok. Ich habe keine Kontrolle über den Inhalt oder das Format der JSON-Datei. Also in oben genannten Zustand, was kann am besten getan werden? –

Antwort

1

gefüllt Parameter ist ein object leer Parameter ein string

var jsonObj1={"someinfo":{"Parameter":{"ABC":"123","xyz":"456"}}}; 
 
var jsonObj2={"someinfo":{"Parameter":""}}; 
 
alert("Full: "+typeof jsonObj1.someinfo.Parameter+" ---- Empty: "+typeof jsonObj2.someinfo.Parameter)

Sie können nicht "Schleife in einem String" ist also, wenn Sie entweder Ihre JSON ändern oder es so testen

if (typeof jsonObj1.someinfo.Parameter==="object") { 
    for (var tempVal in jsonObj.someinfo.Parameter) { 
    //print tempval 
    } 
} else { 
    //empty 
} 
0

könnten Sie einfach überprüfen, ob jsonObj.someinfo.Parameter ist ein Objekt wie folgt aus:

var json = {"someinfo":{"Parameter":{"ABC":"123","xyz":"456"}}}; 

if(typeof json.someinfo.Parameter === "object") { 
    for(var key in json.someinfo.Parameter) { 
    // print key 
    } 
} else { 
    // Do something when it is not an object (empty) 
}