«

»

may 08 2012

Parseando JSON en Android

En un tutorial anterior os mostrábamos como consumir servicios SOAP pero no profundizamos en como manejar estos datos consumidos. Estos datos pueden venir en diferentes formatos (XML, JSON…) y en el tema que nos trata nos centraremos en JSON y como parsearlo con la librería nativa de Android.

 

¿Porqué JSON?

La eficiencia en el uso de los recursos a la hora de desarrollar aplicaciones móviles es una piedra angular que no podemos obviar, sobre todo en el caso como el consumo de datos de internet que deberemos optimizar lo máximo posibles posible para ahorrar batería y aprovechar las tarifa de datos existentes actualmente. En este sentido JSON, gracias a su estructura, ahorra considerablemente respecto a XML.

 

¿Como manejar los datos?

Una vez tenemos la cadena JSON disponible para su procesado (ya sea desde un fichero, web service SOAP o a través de url) todo se basara en un par de clases JSONArray y JSONObject, que nos proporcionaran la colección de datos y los datos uno a uno respectivamente.

Al crear una instancia de JSONArray a partir del JSON leído obtendríamos un array de JSONObjet con todos los elementos anidados en el JSON:

 

JSONArray jsonArray = new JSONArray(dataJSON);

 

Una vez obtenido esto deberemos ir recorriendo el array obteniendo cada JSONObject pudiendo acceder a sus atributos y procesándolos a nuestro antojo:

 

for (int i = 0; i < jsonArray.length(); i++) {
     	JSONObject jsonObject = jsonArray.getJSONObject(i);
	
	boolean var1 = jsonObject.getBoolean(atr1);
	int var2 = jsonObject.getInt(atr2);
	String var3 = jsonObject.getString(atr4);
}

 

Algunos de estos atributos podrían ser a su vez otros JSONArray y deberíamos repetir el proceso para analizar todos los datos. Como podemos ver este proceso es manual y puede llegar a ser tedioso pero nos permite todo el control que queramos sobre el proceso de parseo. En posteriores posts o mostraremos librerías que nos permitirán deserializar estos datos mediante clases java contenedoras de los datos, como por ejemplo Jackson.

 

via | Ingens Blog

fuente | www.vogella.com

 

Acerca del autor

JMPergar

Mobile Developer at @BeRepublic & Founder of @AndroCode. Silver Speaker & Member of Core Team at @GDGBarcelona.

  • https://twitter.com/#!/chinoataku Chinoataku

    Para los que usen REST

    String resultado = null;
    HttpClient httpclient = new DefaultHttpClient();
    HttpGet request = new HttpGet(“URL_REST”);
    request.setHeader(“content-type”, “application/json”);
    ResponseHandler handler = new BasicResponseHandler();
    try {
    resultado = httpclient.execute(request, handler);
    } catch (ClientProtocolException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }

    JSON de ejemplo

    {
    “elementos”: [
    {
    "nombre": "Prueba 1",
    "descripcion": "Descripción 1"
    },
    {
    "nombre": "Prueba 2",
    "descripcion": "Descripción 2"
    }
    ]
    }

    Para converitir mi string a un JSONArray primero tengo que

    JSONObject jsObject = new JSONObject(resultado);

    Y una vez tengo el objeto lo convierto al array así

    JSONArray elementos= jsObject.getJSONArray(“elementos”);

    • https://twitter.com/#!/chinoataku Chinoataku

      Que se me olvidó después del último catch

      httpclient.getConnectionManager().shutdown();

      • http://www.linkedin.com/in/jmpergar JMPergar | Editor Jefe

        Gracias por el aporte

    • Armando

      como quedaria entonces formalmente con sus import y todo lo demas??

      • http://www.linkedin.com/in/jmpergar JMPergar | Editor Jefe

        Te refieres al tutorial o al aporte de Chinoataku?

  • Mario Merino

    Hola que tal me interesa leer un JSON que solo consta de solo esto {“suma”:10}
    como se le haría?? he visto ejemplos pero todos tienen muchos arrays y muchos objetos
    yo solo quiero leer un objeto y pasarlo a un textview

    gracias

    • http://www.linkedin.com/in/jmpergar JMPergar | Editor Jefe

      Sería igual, te devolvería un array de un solo elemento. Quizás no deberías usar JSON, si tan solo quieres eso puedes devolver el valor tal cual.

    • Jonathan García

      String aux; // asumamos que este String contiene {“suma”:10}

      seria algo así

      JSONObject jobject = new JSONObject(aux);
      int valor= jobject .getInt(“suma”);

  • Fatima

    Hola!
    primera vez que trabajo con JSON, y estoy algo confudida. necesito pegar en una respuesta a un requets para la api de foursque la cual es en el formato de JSON, y usar algun parser para manejarlo y escoger algunos atributos, como haria esto? disculpa mi ignorancia.. gracias de antemano

  • Jose

    Muchas gracias me as salvado…

  • Manu

    Y si la lista datos es en XML? que puedo hacer?

  • Jonatan

    JSONObject json=userFunction.buscagrupos(user.get(“uid”));

    for(int i = 0; i < json.length(); i++){
    Log.i("El uid es:",user.get("name") ) ;
    grupadd.add(user.get("name"));
    }

    me da el siguiente error que no se como solucionarlo, quiero obtener "grupo1" y "grupo2" :

    error parsing data org.json.JSONException: Value ["grupo1","grupo2"] of typeorg.json.JSONArray cannot be converted to JSONObject]

    gracias

  • http://gravatar.com/tonatiuhnava tonatiuhnava

    tengo una aplicaicon en maspforge pero quiero que los marcadores obtener la latitud y longitud desde json en web como podia parsearlos si tengo el siguiente json
    http://tonatiuhnava.com/tuiresources/data.json
    y segun el json que me crea un overlay y poder mostrarlo en el mapView

  • jorge bautista

    como puedo obtener los valores de un json array con el uso de los putExtra