Привести элемент JSONArray к JSONObject - ClassCastException

Я пытаюсь обработать ответ JSON с помощью библиотеки "org.json". Итак, я конвертирую строковый ответ в JSONArray:

JSONArray listWallPosts = jsonWallPosts.getJSONArray("response");

а listWallPosts содержит, например, такой набор данных:

[1388,
{
    "date": 1441127306,
    "from_id": 45700,
    "comments": {
        "count": 0,
        "can_post": 1
    },
    "to_id": 44970,
    "online": 0,
    "post_type": "post",
    "id": 2469,
    "text": "Some message",
    "reply_count": 0
},
{
    "date": 1425812975,
    "from_id": 16089771,
    "comments": {
        "count": 0,
        "can_post": 1
    },
    "to_id": 44970,
    "online": 0,
    "post_type": "post",
    "id": 2467,
    "text": "Some another message",
    "reply_count": 0,
}]

Когда я пытаюсь обработать элементы списка в цикле:

for(int j=0; j< listWallPosts.length(); j++){
    JSONObject post = (JSONObject)listWallPosts.get(j);
    //do something
}

Я сталкиваюсь с ClassCastException - java.lang.Integer не может быть приведен к org.json.JSONObject.

Может ли кто-нибудь предложить лучший подход для решения этой проблемы? Должен ли я перенести приведение из элемента списка в JSONObject в try-catch или есть лучшие варианты?

2 ответа

Решение

В моем текущем подходе я обрабатываю его с помощью instanceof в выражении if:

for(int j=0; j< listWallPosts.length(); j++){
    if(listWallPosts.get(j) instanceof JSONObject){
        JSONObject post = (JSONObject)listWallPosts.get(j);
        //to do something
    }
}

Похоже, ваш ответ имеет какое-то ID и список JSONObjectс этим связано. Возможно, вам придется написать что-то вроде этого:

int id = listWallPosts.getInt(0);
for(int j = 1; j < listWallPosts.length(); j++) {
    JSONObject post = listWallPosts.getJSONObject(j);
}
Другие вопросы по тегам