Trabajando con JSON en Android
No es la primera vez que os hablamos de JSON, nuestro querido Alejandro ya lo comentó en su momento en este tutorial para PHP. Esta vez pretendo dar un pequeño resumen de cómo se trabajaría con Android para leer desde un cadena de JSON y pasarlo a un Objeto de Java que es con lo que normalmente solemos estar más cómodos.
¿Qué es y para qué sirve JSON?
JSON (JavaScript Object Notation) es un formato para el intercambios de datos, básicamente JSON describe los datos con una sintaxis dedicada que se usa para identificar y gestionar los datos. Nació como una alternativa a XML y, una de las mayores ventajas que tiene su uso es que puede ser leído por cualquier lenguaje de programación. Por lo tanto, puede ser usado para el intercambio de información entre distintas tecnologías. Además debido a su naturaleza y al ser más compacto suele ser mucho más rápido trabajar con JSON antes que con XML.
Ejemplo
Siguiendo el ejemplo que nos ponía Alejandro en su tutorial, partimos de que tenemos una lista de frutas con su nombre y cantidad.
Frutas:
- Manzana - 10 unidades
- Pera - 20 unidades
- Naranja - 30 unidades
Esto se traduciría en JSON de la siguiente manera:
{ "frutas": [ { "nombre_fruta":"Manzana" , "cantidad":10 }, { "nombre_fruta":"Pera" , "cantidad":20 }, { "nombre_fruta":"Naranja" , "cantidad":30 } ] }
Show me the code
Supongamos que tenemos la siguiente clase con la cual queremos trabajar en Java:
public class Fruta { public String nombre; public int unidades; }
Nuestro objetivo es pasar de una cadena de JSON a una Lista de Objetos Fruta con los que poder trabajar cómodamente en Java, para lo cual deberemos hacer lo siguiente.
String json = CADENA_JSON; List<Fruta> lista_frutas = new ArrayList<>(); //inicializamos la lista donde almacenaremos los objetos Fruta JSONObject object = new JSONObject(json); //Creamos un objeto JSON a partir de la cadena JSONArray json_array = object.optJSONArray("frutas"); //cogemos cada uno de los elementos dentro de la etiqueta "frutas" for (int i = 0; i < json_array.length(); i++) { lista_frutas.add(new Fruta(json_array.getJSONObject(i))); //creamos un objeto Fruta y lo insertamos en la lista }
Los más rápidos ya estarán pensado que algo de magia negra hay. Pues sí, nos falta declarar un constructor dentro de nuestra clase Fruta para que mediante un Objeto JSON se inicialice nuestro Objeto Fruta. Crearemos el siguiente constructor dentro de nuestra clase.
public Fruta(JSONObject objetoJSON) { nombre = objetoJSON.getString("nombre_fruta"); unidades = objetoJSON.getInt("cantidad"); }
Teaser
Este es un ejemplo sencillo, pero cuando la cosa empieza a crecer os aseguro que puede llegar a ser muy tedioso. Para esto, la próxima semana os enseñaré cómo se suele trabajar en producción con JSON en Android.
¿Os ha parecido sencillo? ¿Conocíais ya este método?