Java:如何在Android中解码JSON?我究竟做错了什么?

时间:2014-02-07 16:19:27

标签: java android json

我有一个Android应用程序,我从API中获取了一些JSON,我现在需要解码。我很远,但我没有得到内容。我收到的JSON看起来像这样:

{ "messages": [
    {
    "created": "1391783287",
    "id": 1,
    "is_supporter": false,
    "text": "Behold! This is a message?"
    },
    {
    "created": "1391783287",
    "id": 3,
    "is_supporter": true,
    "text": "Behave! This is an answer!"
    }
]}

我有这段代码:

@Override
protected void onPostExecute(String result) {
    try{
        JSONArray jArray = new JSONArray(result);

在上面代码的最后一行,我收到一条错误Error: org.json.JSONException: Value {"messages":[{"id":1,"created":"1391788514","text":"How do I pay to an IBAN?","is_supporter":false},{"id":3,"created":"1391788514","text":"What is a payment pool?","is_supporter":false}]} of type org.json.JSONObject cannot be converted to JSONArray

有没有人知道这里有什么问题或我如何解决这个问题?

3 个答案:

答案 0 :(得分:7)

你的String是一个包含JSON数组的JSON对象,试试这个:

JSONObject myJSON = new JSONObject(result);
JSONArray jArray = myJSON.getJSONArray("messages");

然后遍历你的JSONArray ......

int size = jArray.length();
for (int i=0 ; i<size ; i++){
    JSONObject itemInArray = jArray.get(i);
    // get values inside the object, for example :
    String text = itemInArray.getString("text");
}

答案 1 :(得分:3)

您可以在Java中使用旧的http://www.json.org lib:

首先将您的json文件内容读入String; 然后将其解析为JSONObject,如果有数组,则获取数组;

JSONObject myJson = new JSONObject(myJsonString);
// get the JsonArray
JSONArray jArray = jobj.getJSONArray("messages");
//Loop through the array to get the JSONObjects
for(int i=0;i<jArray.length();i++) {
// use myJson as needed, for example 
int id = jArray.getJsonobject(i).getString("id");
// etc
}

答案 2 :(得分:2)

JSONArray位于JSONObject

这样做是为了得到数据

@Override
protected void onPostExecute(String result) {
    try {
        JSONObject jobj = new JSONObject(result);
        JSONArray jArray = jobj.getJSONArray("messages");
        for(int i=0;i<jArray.length();i++) {
            String created=jArray.getJsonobject(i).getString("created");
        }
}