JSON Array итерация в Android / Java
Я создаю приложение для Android, которое необходимо загрузить и синхронизировать с онлайн-базой данных. Я отправляю свой запрос из приложения на страницу php, которая возвращает соответствующие строки из базы данных в формате JSON.
может кто-нибудь, пожалуйста, скажите мне лучший способ повторить через массив JSON?
Я получаю массив объектов:
- Каковы все различные способы создания объекта в Java?
- Как правильно строить банки от IntelliJ?
- java: Class.isInstance vs Class.isAssignableFrom
- Создание приложения Android Lock Screen.
- Android RecyclerView добавление и удаление элементов
[{json object},{json object},{json object}]
Какова самая простая часть кода, которую я мог бы использовать для доступа к JSONObjects в массиве?
EDIT: теперь, когда я думаю об этом, метод, который я использовал для итерации цикла, был:
for (String row: json){ id = row.getInt("id"); name = row.getString("name"); password = row.getString("password"); }
Поэтому я предполагаю, что мне удалось каким-то образом превратить возвращенный Json в итеративный массив. Любые идеи, как я мог бы это достичь?
Я извиняюсь за свою бродяжничество, но у меня это работает на примере, который я нашел в Интернете, и с тех пор не смог его найти.
- Полноэкранный просмотр без растягивания видео
- java.lang.ClassNotFoundException при работе в IntelliJ IDEA
- Map.clear () vs new Map: Какой из них будет лучше?
- Как удалить материал, напечатанный на консоль System.out.println ()?
- Основной метод не найден, даже если я его объявил
- Как я могу генерировать случайное число в определенном диапазоне в Android?
- Использование Retrofit в Android
- В Java, почему equals () и hashCode () должны быть последовательными?
Я сделал это двумя разными способами,
1.) составить карту
HashMap applicationSettings = new HashMap(); for(int i=0; i
2.) сделать JSONArray имен
JSONArray names = json.names(); JSONArray values = json.toJSONArray(names); for(int i=0; i
Я думаю, что этот код короткий и понятный:
int id; String name; JSONArray array = new JSONArray(string_of_json_array); for (int i = 0; i < array.length(); i++) { JSONObject row = array.getJSONObject(i); id = row.getInt("id"); name = row.getString("name"); }
Это то, что вы искали?
к сожалению, JSONArray не поддерживает для каждого утверждения, например:
for(JSONObject someObj : someJsonArray) { // do something about someObj .... .... }
Если вы используете реализацию JSON.org Java , которая является открытым исходным кодом, вы можете просто сделать JSONArray реализовать интерфейс Iterable
и добавить в class следующий метод:
@Override public Iterator iterator() { return this.myArrayList.iterator(); }
Это сделает все экземпляры JSONArray итерабельными, что означает, что синтаксис for (Object foo : bar)
теперь будет работать с ним (обратите внимание, что foo должен быть объектом, потому что JSONArrays не имеет объявленного типа). Все это работает, потому что class JSONArray поддерживается простым ArrayList, который уже является итерируемым. Я полагаю, что другие реализации с открытым исходным кодом были бы столь же легко изменены.
На Массивах, ищет:
JSONArray menuitemArray = popupObject.getJSONArray("menuitem");
Вы используете один и тот же объект Cast для каждой записи. На каждой итерации вы просто изменили один и тот же объект вместо создания нового.
Этот код должен исправить:
JSONArray jCastArr = jObj.getJSONArray("abridged_cast"); ArrayList castList= new ArrayList (); for (int i=0; i < jCastArr.length(); i++) { Cast person = new Cast(); // create a new object here JSONObject jpersonObj = jCastArr.getJSONObject(i); person.castId = (String) jpersonObj.getString("id"); person.castFullName = (String) jpersonObj.getString("name"); castList.add(person); } details.castList = castList;
Когда я попробовал предложение @ vipw, я столкнулся с этим исключением: The method getJSONObject(int) is undefined for the type JSONArray
Это сработало для меня:
int myJsonArraySize = myJsonArray.size(); for (int i = 0; i < myJsonArraySize; i++) { JSONObject myJsonObject = (JSONObject) myJsonArray.get(i); // Do whatever you have to do to myJsonObject... }
Итерируя по массиву JSON (org.json.JSONArray, встроенный в Android), следите за нулевыми объектами; например, вы можете получить "null"
вместо пустой строки.
Проверка может выглядеть так:
s[i] = array.isNull(i) ? null : array.getString(i);