2017-02-06 143 views
0

我试图从Java HTTP post中的以下json对象中读取数据。我首先将其转换为字符串,然后将json对象转换为读取数据。从2D JSON对象读取数据

{ 
    "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代码的 ..

// 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); 

当我运行代码,我不断收到以下异常

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

我试图访问发件人ID &文本字段“hi there 8”不明白我要去哪里错了..请帮忙..

回答

1

正如你可以清楚地看到你给的那个JSON,entryJSONArray,但是这个数组中的第一个实体不是JSONObject,它很简单,因为你得到的错误是JSONObject

由于错误说:org.json.JSONException: JSONArray[0] is not a JSONArray

JSONArray[0]JSONObject它实际上是一个JSONObject

JSONArray first = rows.getJSONArray(0); 

上面一行,因为返回的对象是JSONObjectJSONArray导致错误。因此,将其更改为,

JSONObject first = rows.getJSONObject(0); 

而且访问message textsender id您可以在以下

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

想你的解决方案...我收到错误“JSONArray [0]是不是字符串“... – Lucy

+0

@Lucy现在尝试我错过了'{'in'entry:[{id',现在它会正常工作。 'rows'包含'JSONObject'而不是'String'。 –

+0

让我知道它是否适用于我,我想工作。 –