2016-12-09 5 views
0

Ich habe einige JSON-Daten vom Server zurückgegeben.Ermitteln, ob ein Objekt ein Array oder eine Zeichenfolge ist

Manchmal sind die Daten ein Array andere Male, es gibt eine leere Zeichenfolge (ja, ich weiß, es sollte ein leeres Array zurückgeben).
Also muss ich FIRST überprüfen, wenn der Typ eine Instanz eines Strings ist; Wenn ja, werde ich es ignorieren und mit dem Leben weitermachen.
Sonst muss ich die Werte einlesen.

Wie kann ich feststellen, ob ein Objekt ein String ist?

Ich habe diese SO question und einige andere angeschaut, aber ich denke nicht, dass es genau zu meinem Szenario passt.
Ich fühle mich wie ich bin nahe, aber mein Code schlägt fehl, ich kann ein Objekt nicht auf eine Zeichenfolge zu werfen.
Aber wenn ich es in eine Zeichenfolge umwandeln ... dann wird es IMMER eine Instanz einer Zeichenfolge sein. Endlosschleife.

Hier ist, wo ich bisher bin.

private void myMethod(JSONObject data){ 
    if (data.has("Notes")){ 
     Object json = new JSONTokener(data.getJSONObject("Notes")).nextValue(); 

     if(data.getJSONObject("Notes") instanceof String) { 
      JSONArray array = data.getJSONObject("Notes").getJSONArray("Note"); 
      //do all the array stuff 
     } 
    } 
} 

JSON mit Array Beispiel

{ "Data": { 
     "key": "A value", 
     "another key": "some value", 
     "Notes": { 
      "Note": ["1", "2", "3", "4"] 
     } } } 

JSON ohne Array Beispiel

{ "Data": { 
     "key": "A value", 
     "another key": "some value", 
     "Notes": "" 
    } } 
+1

'getJSONObject' gibt ein' JSONObject' zurück, das nicht 'instanceofString' ist. –

+0

Ich muss wissen, was der Inhalt von "Notes" ist. Ist es eine Zeichenfolge oder ist es ein Array? –

+0

Ich denke, du willst 'get (" Notes ") instanceof bekommen, da' get' die Klasse 'Object' zurückgibt. Sie können auch eine der 'opt'-Methoden versuchen, die' null' zurückgibt, wenn sie nicht konvertiert werden kann. –

Antwort

1

Sie haben diese

Object json = new JSONTokener(data.getJSONObject("Notes")).nextValue(); 

Aber Sie verwenden nicht json hier. Sie haben getJSONObject("Notes") ein zweites Mal extrahiert.

if(data.getJSONObject("Notes") instanceof String) { 

if(json instanceof String) { 

Versuchen Wenn das, ich versuche nicht funktioniert würde

JSONObject notesObj = data.optJSONObject("Notes"); 
if (noteObj == null) { 
    // It might be a string, but it was not an object 
} 

Ich bin nicht sicher, was passiert, wenn Sie getString("Notes") nur verwendet passieren würde, gegen ein Wert, der ein Objekt war. Es könnte toString es, aber ich habe es nicht zuletzt versucht, daran zu erinnern.

Verwandte Themen