从2D JSON对象读取数据

时间:2017-02-06 07:35:24

标签: java arrays json

我正在尝试从Java HTTP帖子中读取以下json对象的数据。我首先将它转换为字符串,然后将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 个答案:

答案 0 :(得分:1)

正如您可以清楚地看到您所提供的JSON entryJSONArray,但此数组中的第一个实体不是JSONObject,因此JSONObject很简单其中你得到了错误。

错误显示org.json.JSONException: JSONArray[0] is not a JSONArray

JSONArray[0] JSONObject实际上不是JSONObject

JSONArray first = rows.getJSONArray(0);

以上行导致错误,因为返回的对象为JSONObject而不是JSONArray。所以改成它,

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