Единственное, что всегда гарантировано, это messageByDate obj. Массив и объекты, названные так «15 МАЯ 2012», генерируются сервером (без контроля), основанным на сообщениях или нет, для этой даты.Android: как разобрать этот смешанный ответ json
Если вы заметили, что первая представленная дата представляет собой массив, а другие даты - объекты, содержащие другие объекты, которые были пронумерованы.
ВОПРОС 1: как разобрать это, не зная, какие даты будут присутствовать?
ВОПРОС 2: Некоторые сообщения находятся в массиве вместо объекта. как мне собрать все вместе в один ArrayList. Скорее это в массиве или нет, потому что массив не всегда будет там.
Пожалуйста, любая помощь будет оценена, как я до моих последних волос
Спасибо.
{
"messagesByDate":{
"15 May 2012":[
{
"id":"1383483367",
"conversation_id":"274618561",
"user_id":"4318264",
"message":"ok will do",
"date_sent":"1337133515",
"date_sent_ago":"7 mins ago"
},
{
"id":"1380222533",
"conversation_id":"274618561",
"user_id":"5159567",
"message":"ok well hmu",
"date_sent":"1337085122",
"date_sent_ago":"13 hrs ago"
},
{
"id":"1380172978",
"conversation_id":"274618561",
"user_id":"5159567",
"message":"superhead",
"date_sent":"1337083910",
"date_sent_ago":"13 hrs ago"
},
{
"id":"1380130860",
"conversation_id":"274618561",
"user_id":"5159567",
"message":"you ready B",
"date_sent":"1337082797",
"date_sent_ago":"14 hrs ago"
},
{
"id":"1378841432",
"conversation_id":"274618561",
"user_id":"5159567",
"message":"hit my cell tho",
"date_sent":"1337054524",
"date_sent_ago":"22 hrs ago"
},
{
"id":"1378836763",
"conversation_id":"274618561",
"user_id":"5159567",
"message":"whats up baby",
"date_sent":"1337054475",
"date_sent_ago":"22 hrs ago"
}
],
"12 May 2012":{
"6":{
"id":"1362948558",
"conversation_id":"274618561",
"user_id":"4318264",
"message":"ok ima text u",
"date_sent":"1336819668",
"date_sent_ago":"3 days ago"
}
},
"11 May 2012":{
"7":{
"id":"1361356267",
"conversation_id":"274618561",
"user_id":"5159567",
"message":"yea thats cool",
"date_sent":"1336790738",
"date_sent_ago":"3 days ago"
},
"8":{
"id":"1357783913",
"conversation_id":"274618561",
"user_id":"5159567",
"message":"sorry im here. would u like to exchange numebers instead?",
"date_sent":"1336722533",
"date_sent_ago":"4 days ago"
},
"9":{
"id":"1357759262",
"conversation_id":"274618561",
"user_id":"5159567",
"message":"hello?",
"date_sent":"1336721851",
"date_sent_ago":"4 days ago"
}
}
}
}
ОТВЕТ SORTA-Любопытное
JSONObject dateHolder = r.getJSONObject("messagesByDate");
Iterator holderItr = dateHolder.keys();
while(holderItr.hasNext()){
String thisdate = holderItr.next().toString();
Object date = dateHolder.get(thisdate);
if (date instanceof JSONArray) {
System.out.println(thisdate+" is an ARRAY.");
JSONArray jarray = (JSONArray) date;
for(int x=0;x<jarray.length();x++){
String msgId = jarray.getJSONObject(x).getString("id");
String msgConvoId = jarray.getJSONObject(x).getString("conversation_id");
String msgUserId = jarray.getJSONObject(x).getString("user_id");
String msgBody = jarray.getJSONObject(x).getString("message");
String msgDateSent = jarray.getJSONObject(x).getString("date_sent");
String msgDateSentAgo = jarray.getJSONObject(x).getString("date_sent_ago");
HashMap<String,String> temp = new HashMap<String,String>();
temp.put("msgId",msgId);
temp.put("msgUserId", msgUserId);
temp.put("msgBody", msgBody);
temp.put("msgDateSent", msgDateSent);
temp.put("msgDateSentAgo", msgDateSentAgo);
messages.add(temp);
}
} else {
System.out.println(thisdate+" is an OBJECT.");
JSONObject jobj = (JSONObject) date;
Iterator insideDate = jobj.keys();
while(insideDate.hasNext()){
String number = insideDate.next().toString();
System.out.println(number);
String msgId = jobj.getJSONObject(number).getString("id");
String msgConvoId = jobj.getJSONObject(number).getString("conversation_id");
String msgUserId =jobj.getJSONObject(number).getString("user_id");
String msgBody = jobj.getJSONObject(number).getString("message");
String msgDateSent = jobj.getJSONObject(number).getString("date_sent");
String msgDateSentAgo = jobj.getJSONObject(number).getString("date_sent_ago");
HashMap<String,String> temp = new HashMap<String,String>();
temp.put("msgId",msgId);
temp.put("msgUserId", msgUserId);
temp.put("msgBody", msgBody);
temp.put("msgDateSent", msgDateSent);
temp.put("msgDateSentAgo", msgDateSentAgo);
messages.add(temp);
}
}
}
Это дает мне все сообщения в HashMap и добавляет его к ArrayList называют сообщения, как я хочу, но не в порядке по дате. json указан по дате ... кто-нибудь знает, есть ли способ направить json-чтение? ИЛИ мои петли WHILE и FOR вышли из строя? Могу ли я сортировать хэш-карты с помощью ключа? Я Google, что ...
Eclipse сообщает мне, что оператор for должен использовать переменную или экземпляр iterable для msgJson.keys() – TonyCruze
Это довольно легко преобразовать, чтобы использовать итерацию старого стиля в Java. На этот раз я обновил код. Имейте в виду, я просто делаю это с головы. Я не тестирую его, так что тривиальные синтаксические изменения, как это, читатель должен делать самостоятельно. – chubbsondubs
Да, я начал играть с Iterator next() и hasNext() вчера вечером вместо заявления FOR и получил довольно близко. но не два вместе, поэтому я попробую это. Я думаю, что важная часть, которую я отсутствовала, - просто проверить, является ли это «экземпляром». Im goin, чтобы посмотреть и проверить этот пример и посмотреть, смогу ли я заставить его работать. Огромное спасибо. – TonyCruze