2015-09-07 3 views
-1

Я пытаюсь обработать ответ JSON с помощью библиотеки «org.json». Таким образом, я преобразовать строку ответа в JSONArray:Ввести элемент JSONArray в JSONObject - ClassCastException

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 
} 

I face with ClassCastException - java.lang.Integer нельзя передать в org.json.JSONObject.

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

+0

Если есть число в массиве JSON, извлекать его как число. Что вы не понимаете из-за ошибки, которую вы предоставили json? –

+0

что такое '1388'? – Rustam

+0

Я понимаю причину исключения, но я спрашиваю «о лучшем подходе к его обработке», а не почему это происходит! –

ответ

0

В моем текущем подходе я справиться с InstanceOf в если заявление:

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

Я выбрал этот подход, потому что, в отличие от решения, предложенного KDM, этот код работает в том случае, если любой элемент списка может быть не JSONObject (например, число). –

1

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

int id = listWallPosts.getInt(0); 
for(int j = 1; j < listWallPosts.length(); j++) { 
    JSONObject post = listWallPosts.getJSONObject(j); 
}