tutorialspoint studio parser getjsonarray example crear consumir array java android json

java - studio - save json android



Obteniendo JSONObject de JSONArray (7)

Esta pregunta ya tiene una respuesta aquí:

Estoy en una solución con respecto al JSONObject que recibo como respuesta del servidor.

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"}]

como puede ver en la respuesta que recibo, estoy analizando el JSONObject y creando syncresponse, synckey como un objeto JSON createdtrs, modtrs, deletedtrs como JSONArray . Quiero acceder al JSONObject desde deletedtrs, para poder separarlos y usar los valores. es decir, quiero extraer companyid, nombre de usuario, fecha, etc.

¿Cómo puedo hacer esto?

Gracias por tu contribución.


Al usar la biblioteca 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();

// cuando usamos la biblioteca de 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<String,Object> userData = mapper.readValue(jp, Map.class); userData.get("dayOfWeek"); // process // after binding, stream points to closing END_OBJECT }


Aquí está tu json:

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

y está analizando:

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"); }


Los objetos JSONArray tienen una función getJSONObject(int index) , puede recorrer todos los JSONObjects escribiendo un for-loop simple:

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


empezar desde

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

puede iterar a través de JSONArray y usar valores directamente o crear objetos de su propio tipo
que manejará los campos de datos dentro de cada miembro deletedtrs_array

Iterando

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"); }

Tipo de objeto propio

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"); } }


Volly biblioteca de Android Volly tanto como sea posible. Mapea tu respuesta JSON en los objetos de clase respectivos. Puede agregar setter getter para los objetos del modelo de respuesta. Y luego puede acceder a estos valores / parámetros JSON usando .operator como el objeto JAVA normal. Hace que el manejo de la respuesta sea muy simple.


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"}]

El obtener companyid, nombre de usuario, fecha;

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