Разбор JSON, не уверен, как и когда использовать итераторы - PullRequest
1 голос
/ 09 октября 2010

У меня есть этот JSON для анализа

{"files_informations": {
                         "row":{"value":"artist1"},
                         "row":{"value":"artist2"}
                       }
}

Я хотел бы знать, как я могу получить первое значение artist1 , а затем второе artist2

Вот что я делаю:

JSONObject myObject = jObject.getJSONObject("files_informations");
JSONObject rowObject = myObject.getJSONObject("row");
Iterator<JSONObject> rowIt = rowObject.keys();

while (rowIt.hasNext()) {
     JSONObject tmp = rowIt.next();             
     Log.e("", tmp.getString("value"));
}

Я получил java.lang.classCastException для этого JSONObject tmp = rowIt.next();

Итак, у меня есть два вопроса :

  • Нужно ли использовать в этом случае итераторы?
  • Как их использовать?

Редактировать:

Должен ли JSON выглядеть так?

{"files_informations": [
                         "row":{"value":"artist2"},
                         "row":{"value":"artist1"}
                       ]
}

1 Ответ

2 голосов
/ 09 октября 2010

rowIt.next() является «строкой» String в этом случае.

Рефакторинг вашего JSON к этому:

{"files_informations":
  [ {"value":"artist2"},
    {"value":"artist1"} ] }

Или даже это:

{ "files_informations": [ "artist2", "artist1" ] } 

и затем используйте:

JSONArray artistsArr = myObject.getJSONArray("files_informations");
for (int i = 0; i < artistsArr.size(); i++) {
     // first case
     Log.d(TAG, artistsArr.get(i).getString("value"));
     // Second case
     Log.d(TAG, artistsArr.getString(i));
}

Итераторы не поддерживаются в JSONArrays, однако вы можете преобразовать их в простые массивы / списки Java, если вам это действительно нужно.

...