2017-02-06 2 views
0

Ich versuche, Daten aus dem folgenden JSON-Objekt im Java-HTTP-Post zu lesen. Ich konvertiere zuerst es in String dann json Objekt, um die Daten zu lesen.Lesen von Daten aus dem 2D-JSON-Objekt

{ 
    "entry": [ 
     { 
      "id": "1306487646057992", 
      "messaging": [ 
       { 
        "message": { 
         "mid": "mid.1486361982003:2ed6c8ae51", 
         "seq": 12412, 
         "text": "hi there 8" 
        }, 
        "recipient": { 
         "id": "1306487646057992" 
        }, 
        "sender": { 
         "id": "1374961642574944" 
        }, 
        "timestamp": 1486361982003 
       } 
      ], 
      "time": 1486361982072 
     } 
    ], 
    "object": "page" 
} 

Java-Code ..

// Read from request 
StringBuilder buffer = new StringBuilder(); 
BufferedReader reader = request.getReader(); 
String line; 
while ((line = reader.readLine()) != null) { 
    buffer.append(line); 
} 

String data = buffer.toString(); 
JSONObject row = new JSONObject(data); 

JSONArray rows = row.getJSONArray("entry"); 
JSONArray first = rows.getJSONArray(0); 
System.out.println("first array is "+first); 

Wenn ich den Code ausführen ich erhalte die folgende Ausnahme

org.json.JSONException: JSONArray[0] is not a JSONArray. 

Ich versuche, die Absender-ID & Textfeld zugreifen "Hallo dort 8" Kann nicht verstehen, wo ich falsch liege ... Bitte Hilfe ..

Antwort

1

Wie Sie deutlich sehen können, aus welchem ​​JSON entryJSONArrayJSONArray ist, aber erste Einheit in diesem Array ist nicht JSONObject, es ist einfach ein JSONObject Beacause von dem Sie den Fehler erhalten.

Als Fehler sagt org.json.JSONException: JSONArray[0] is not a JSONArray

JSONArray[0] ist nicht JSONObject seine eigentlich ein JSONObject.

JSONArray first = rows.getJSONArray(0); 

Above Linie verursacht den Fehler, da das zurückgegebene Objekt JSONObject nicht JSONArray ist. ändern Sie es so,

JSONObject first = rows.getJSONObject(0); 

Weitere message text zuzugreifen und sender id können Sie die folgenden,

JSONObject messageObject = rows.getJSONObject(0).getJSONArray("messaging").getJSONObject(0); 
String text = messageObject.getJSONObject("message").getString("text"); 
String senderid = messageObject.getJSONObject("sender").getString("id"); 
+0

Versuchte Ihre Lösung ... Ich erhalte die Fehlermeldung „JSONArray [0] ist kein String "... – Lucy

+0

@Lucy versuche jetzt, ich verpasse' {'in' entry: [{id', jetzt wird es gut funktionieren. 'rows' enthalten ein' JSONObject' anstelle von 'String'. –

+0

Lassen Sie es mich wissen, wenn es für Sie funktioniert, was ich arbeiten soll. –