Привести элемент 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);
}