Когда я вызываю сервер, его ответ основан на объекте json. На самом деле, я знаю, как разбирать объект JSON, но этот ответ для меня странный. Ответ сервера:
{"body":"Not Available!","clazz":"SoccerMatchPreview","id":{"inc":-2024241794,"machine":415106952,"new":false,"time":1337861978000,"timeSecond":1337861978},"publishedDate":"2012-06-08 17:00:00 +0100","refKey":"SoccerMatchPreview_4fb897be18be8b87f9117595","title":"Poland vs Greece"}
Те, которые мне нужны, являются телом, publishedDate, refKey и title. Код, который я написал на основе объекта JSON, таков:
JSONObject jObject = new JSONObject(response);
JSONArray contestantObjects = jObject.getJSONArray("id");
for(int i=0; i<contestantObjects.length(); i++) {
mPreview.setBody(contestantObjects.getJSONObject(i).getString("body").toString());
mPreview.setPublishedDate(contestantObjects.getJSONObject(i).getString("publishedDate").toString());
mPreview.setRefKey(contestantObjects.getJSONObject(i).getString("refKey").toString());
mPreview.setTitle(contestantObjects.getJSONObject(i).getString("title").toString());
}
Но поскольку у него нет "[]" я думаю, что это не объект JSON. поэтому я написал другой JSON-массив на основе кода.
JSONArray contestantObjects = new JSONArray(response);
for(int i=0; i<contestantObjects.length(); i++) {
mPreview.setBody(contestantObjects.getJSONObject(i).getString("body").toString());
mPreview.setPublishedDate(contestantObjects.getJSONObject(i).getString("publishedDate").toString());
mPreview.setRefKey(contestantObjects.getJSONObject(i).getString("refKey").toString());
mPreview.setTitle(contestantObjects.getJSONObject(i).getString("title").toString());
}
но результат тот же, и Logcat показывает:
Значение { "id": { "timeSecond": 1337861978, "time": 1337861978000, "new": false, "machine": 415106952, "inc": - 2024241794}, "body": "not Available!", "title": "Польша против Греции", "publishedDate": "2012-06-08 17:00:00 +0100", "clazz": "SoccerMatchPreview", "refKey": "SoccerMatchPreview_4fb897be18be8b87f9117595" } типа org.json.JSONObject не может быть преобразован в JSONArray
любое предложение будет оценено. Благодаря
JSONArray contestantObjects = jObject.getJSONArray("id");
Ваша ошибка здесь, id
сама является сложным объектом, а не массивом.
"id":{"inc":-2024241794,"machine":415106952,"new":false,"time":1337861978000,"timeSecond":1337861978}
Следовательно, после получения объекта id
JSON вы должны иметь возможность получать отдельные атрибуты, например. inc
, machine
, new
, time
и timeSecond
.
JSONObject idObject = ...getJSONObject("id");
String machine = idObject.get("machine");
Структура данных массива JSON выглядела бы так: []
означает массив.
Например, "Animals":["Pig", "Cat", "Dog"]
.
В другом примере он также может быть массивом сложных объектов, "Animals":[{"name":"AAA", "blood":"A"}, {"name":"BBB", "blood":"B"}]
.
EDIT: вот хороший визуализатор JSON, который я бы рекомендовал.