Android, синтаксический анализ объекта JSON

1

Когда я вызываю сервер, его ответ основан на объекте 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

любое предложение будет оценено. Благодаря

Теги:
arrays
parsing

1 ответ

4
Лучший ответ
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, который я бы рекомендовал.

http://jsonviewer.stack.hu/

Изображение 174551

  • 0
    Спасибо, дорогой Чин, основываясь на том, что ты упомянул, я обнаружил, что «id» - это неправильный ключ, потому что мне не нужны его элементы. Как получить тело, опубликованные дату, refKey и заголовок? На основании чего я должен разобрать строку «ответ»?
  • 0
    Чтобы получить опубликованные дату, refKey и заголовок, вам понадобится только JSONObject jObject = new JSONObject (response); String publDate = jObject.get ("publDate"); и так далее.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню