Получение JSONObject из JSONArray

Я немного исправляю JSONObject, который я получаю в ответ от сервера.

jsonObj = new JSONObject(resultString); JSONObject sync_reponse = jsonObj.getJSONObject("syncresponse"); String synckey_string = sync_reponse.getString("synckey"); JSONArray createdtrs_array = sync_reponse.getJSONArray("createdtrs"); JSONArray modtrs_array = sync_reponse.getJSONArray("modtrs"); JSONArray deletedtrs_array = sync_reponse.getJSONArray("deletedtrs"); String deleted_string = deletedtrs_array.toString(); {"syncresponse":{"synckey":"2011-09-30 14:52:00","createdtrs":[],"modtrs":[],"deletedtrs":[{"companyid":"UTB17","username":"DA","date":"2011-09-26","reportid":"31341"}] 

как вы можете видеть в ответе, который я получаю. Я разбираю JSONObject и создаю syncresponse, synckey как объект JSON createdtrs, modtrs, deletedtrs как JSONArray . Я хочу получить доступ к JSONObject из deletedtrs, чтобы я мог разделить их и использовать значения. т.е. я хочу извлечь companyid, имя пользователя, дату и т. д.

Как я могу это сделать?

Спасибо за ваш вклад.

Объекты JSONArray имеют функцию getJSONObject(int index) , вы можете пропустить все объекты JSONObject, написав простой цикл for:

 JSONArray array; for(int n = 0; n < array.length(); n++) { JSONObject object = array.getJSONObject(n); // do some stuff.... } 

Вот ваш json:

 { "syncresponse": { "synckey": "2011-09-30 14:52:00", "createdtrs": [ ], "modtrs": [ ], "deletedtrs": [ { "companyid": "UTB17", "username": "DA", "date": "2011-09-26", "reportid": "31341" } ] } } 

и он parsing:

 JSONObject object = new JSONObject(result); String syncresponse = object.getString("syncresponse"); JSONObject object2 = new JSONObject(syncresponse); String synckey = object2.getString("synckey"); JSONArray jArray1 = object2.getJSONArray("createdtrs"); JSONArray jArray2 = object2.getJSONArray("modtrs"); JSONArray jArray3 = object2.getJSONArray("deletedtrs"); for(int i = 0; i < jArray3 .length(); i++) { JSONObject object3 = jArray3.getJSONObject(i); String comp_id = object3.getString("companyid"); String username = object3.getString("username"); String date = object3.getString("date"); String report_id = object3.getString("reportid"); } 
 JSONArray deletedtrs_array = sync_reponse.getJSONArray("deletedtrs"); for(int i = 0; deletedtrs_array.length(); i++){ JSONObject myObj = deletedtrs_array.getJSONObject(i); } 
 {"syncresponse":{"synckey":"2011-09-30 14:52:00","createdtrs":[],"modtrs":[],"deletedtrs":[{"companyid":"UTB17","username":"DA","date":"2011-09-26","reportid":"31341"}] 

Получить companyid, имя пользователя, дату;

 jsonObj.syncresponse.deletedtrs[0].companyid jsonObj.syncresponse.deletedtrs[0].username jsonObj.syncresponse.deletedtrs[0].date 

начать с

 JSONArray deletedtrs_array = sync_reponse.getJSONArray("deletedtrs"); 

вы можете выполнять итерацию через JSONArray и использовать значения напрямую или создавать объекты своего типа
который будет обрабатывать поля данных внутри каждого deletedtrs_array

Итерация

 for(int i = 0; i < deletedtrs_array.length(); i++){ JSONObject obj = deletedtrs_array.getJSONObject(i); Log.d("Item no."+i, obj.toString()); // create object of type DeletedTrsWrapper like this DeletedTrsWrapper dtw = new DeletedTrsWrapper(obj); // String company_id = obj.getString("companyid"); // String username = obj.getString("username"); // String date = obj.getString("date"); // int report_id = obj.getInt("reportid"); } 

Тип собственного объекта

 class DeletedTrsWrapper { public String company_id; public String username; public String date; public int report_id; public DeletedTrsWrapper(JSONObject obj){ company_id = obj.getString("companyid"); username = obj.getString("username"); date = obj.getString("date"); report_id = obj.getInt("reportid"); } } 

При использовании библиотеки google gson.

 var getRowData = [{ "dayOfWeek": "Sun", "date": "11-Mar-2012", "los": "1", "specialEvent": "", "lrv": "0" }, { "dayOfWeek": "Mon", "date": "", "los": "2", "specialEvent": "", "lrv": "0.16" }]; JsonElement root = new JsonParser().parse(request.getParameter("getRowData")); JsonArray jsonArray = root.getAsJsonArray(); JsonObject jsonObject1 = jsonArray.get(0).getAsJsonObject(); String dayOfWeek = jsonObject1.get("dayOfWeek").toString(); 

// при использовании библиотеки jacksonа

  JsonFactory f = new JsonFactory(); ObjectMapper mapper = new ObjectMapper(); JsonParser jp = f.createJsonParser(getRowData); // advance stream to START_ARRAY first: jp.nextToken(); // and then each time, advance to opening START_OBJECT while (jp.nextToken() == JsonToken.START_OBJECT) { Map userData = mapper.readValue(jp, Map.class); userData.get("dayOfWeek"); // process // after binding, stream points to closing END_OBJECT } 

По возможности используйте библиотеку Android Volly . Он отображает ваш ответ JSON в соответствующих объектах classа. Вы можете добавить геттер-сеттер для объектов модели ответа. И тогда вы можете получить доступ к этим значениям / параметрам JSON, используя .оператор, как обычный JAVA-объект. Это делает обработку ответа очень простой.

  • Как обновить TextView от другого classа
  • Как я могу представить диапазон в Java?
  • Android: определить яркость (количество света) в окружении телефона с помощью камеры?
  • Не удалось выполнить com.google.android.gms play-services-auth: 11.4.0
  • Recyclerview не вызывать onCreateViewHolder
  • В чем смысл «этого» в Java?
  • Преобразование double в строку
  • Android View исчезает, когда выходит за пределы родителя
  • Разница между getClass (). GetClassLoader (). GetResource () и getClass.getResource ()?
  • В чем разница между ServletContextHandler.setResourceBase и ResourceHandler.setResourceBase при использовании встроенного контейнера Jetty?
  • «Переопределить метод суперclassа» Ошибки после импорта проекта в Eclipse
  • Давайте будем гением компьютера.