Monday, May 3, 2010

JSON + Java + XStream Lib

Ahora, veremos como escribir una cadena formato JSON (JavaScript Object Notation) desde el lenguaje de programación Java con ayuda de la libreria xStream 1.2.2.

import java.util.ArrayList;
import java.util.List;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;

public class classJSON {
public static void main(String[] args) {
XStream xstream = new XStream(new JettisonMappedXmlDriver());
xstream.setMode(XStream.NO_REFERENCES);
List order = new ArrayList();
String[][] source = new String[2][2];
source[0][0] = "1";
source[0][1] = "Dream On";
source[1][0] = "2";
source[1][1] = "Love me two times";
for (int i = 0; i <>
Song song = new Song(source[i][0], source[i][1]);
order.add(song);
}
xstream.alias("SONGS", List.class);
String rtn = xstream.toXML(order);
System.out.println(rtn);
}
}


El ejemplo se hizo desde Eclipse (Galileo), Java 1.6.0_19, y como se dijo antes xStream-1.2.2. La clase completa que hace la escritura es:Lo que se hace aqui es basicamente: Se instancia de la clase XStream el objeto xstream enviandole como paraemtro JettisonMappedXmlDriver(), clases proporcionadas por xstream-1.2.2, las cuales son las ecargadas de crear y ajustar el formato de la cadena JSON.


XStream xstream = new XStream(new JettisonMappedXmlDriver());
xstream.setMode(XStream.NO_REFERENCES);


Una vez tenemos esto, en el ejemplo se hace la prueba con una cadena de texto con 2 dimensiones que puede ser reemplazada por un "ResultSet" recuperado de la consulta a una base de datos o por que no de la información devuelta por un servicio web, por esto se llama la variable "source", es solo un ejemplo.

Recorremos la variable source (ResultSet, Hashtable, ArrayList...etc), y se instancia la clase Song la cual crearemos como sigue:

public class Song {
public String id;
public String title;

public Song(String p_id, String p_title){
id = p_id;
title = p_title;
}
}

Es una simple clase para darle formato a los datos y así el metodo toXML de la clase XStream sepa que datos trae.

Al terminar el ciclo "for" colocamos un "alias" a la cadena JSON para que tenga un nombre descriptivo cada una de las llaves a mostrar.

Por ultimo se llama el método toXML para que genere la cadena JSON la cual es mostrada por pantalla al finalizar la ejecución:

Salida:

{"SONGS":{"Song":[{"id":1,"title":"Dream On"},{"id":2,"title":"Love me two times"}]}}

Muy parecido a los diccionarios en python de por cierto.

Aplicación: Bastante útil para devolver ésta cadena de texto por parte de un servicio web a sus clientes, en vez de usar XML, o mejor dicho, otra alternativa al uso de XML.

Fuentes: