En la actualidad XML sigue siendo un formato respetado y muy útil, pero también surge otro formato que está colocando la balanza a su favor y este es el JSON, su popularidad se debe a que es muy ligero y no requiere de tantos caracteres para crear estructuras, pero sigue siendo estricto por lo que se puede confiar en el mismo.
Requisitos
1- Para poder correr los ejemplos que dejamos aquí, es necesaria la instalación del JDK de Java en su versión 8, sino poseemos esta versión, la ejecución de los mismos no será exitosa, además es recomendable no instalar Java 9 ya que aún está en fase de pruebas y puede contener algunos errores.
2- Debemos también tener un editor de textos para codificar, puede ser Sublime Text o un IDE como Eclipse si este es más del gusto del desarrollador.
3- Finalmente debemos tener permisos de ejecución en consola de los comandos, así como nuestras variables de entorno estén seteadas con los valores correctos para compilar y ejecutar las aplicaciones que desarrollemos.
JSON
JSON corresponde a las siglas JavaScript Object Notation y es un formato nativo de JavaScript como su nombre lo indica, pero su versatilidad y la forma tan sencilla de construir documentos lo han hecho una gran opción para trabajar.
Generalmente se le encuentra en sistemas web, pero recientemente ha tomado protagonismo en sistemas de Bases de Datos no relacionales como MongoDB enlace o CouchDB enlace para manejar los documentos y las diferentes configuraciones de los mismos.
También este formato se ha hecho popular por ser la base de la transferencia de información de los diferentes servicios REST modernos para APIs como Facebook o Twitter, por lo que su conocimiento siempre será un buen añadido a nuestras habilidades.
JSON en Java
El formato JSON al ser un formato de solo texto y que tiene una estructura no tan compleja, nos permite generarlo directamente como una cadena, esta es una de las primeras formas que podemos utilizar.
En Java al tener una librería de manejo de Strings o cadenas de texto tan completa, la generación bajo esta modalidad de JSON es bastante sencilla. Por supuesto a nivel práctico cuando hablamos de documentos muy complejos perdemos la facilidad de la administración de nuestro contenido, pero no por ello quiere decir que sea un método inútil.
Un ejemplo de archivo JSON se puede expresar como lo siguiente:
{“dia”:”lunes”, “mes”:”febrero”}Como vemos no es nada complejo, y se puede extender hacia adentro de forma casi infinita, por ejemplo:
{“dia”:{“numero”:”01”, “semana”:”lunes”}, “mes”:”febrero”}Así podemos ir creando diferentes estructuras según el grado de profundidad y de complejidad que nuestra aplicación nos dicte. Veamos a continuación un pequeño ejemplo de cómo generar directamente un documento JSON con Java.
La aplicación
Vamos a generar un archivo JSON en el cual vamos a almacenar la fecha de nuestro sistema, para ello por supuesto vamos a utilizar la clase Date de Java, y vamos a construir un par de métodos que nos ayudarán a recaudar la información y darle el formato adecuado.
Veamos primero el código y luego explicaremos paso a paso que hemos hecho.
import java.time.LocalDate;public class jsonManual { private static final String APERTURA = "{"; private static final String CIERRE = "}"; public static void main(String[] args) { LocalDate fechaActual = LocalDate.now(); System.out.println(convertirJson(fechaActual)); } public static String convertirJson(LocalDate fechaActual) { StringBuilder elemento = new StringBuilder(); elemento.append(APERTURA).append("\n"); elemento.append(formatearJson("año", fechaActual.getYear())); elemento.append(formatearJson("mes", fechaActual.getMonth())); elemento.append(formatearJson("día", fechaActual.getDayOfMonth())); elemento.append(CIERRE ).append("\n"); return elemento.toString(); } public static String formatearJson(String llave, Object valor) { return String.format("\"%s\": \"%s\",\n", llave, valor); }}Si nos fijamos lo primero que hacemos es definir en unas variables el inicio y cierre de nuestro JSON, esto con la finalidad de tenerlos apartados y también tener la posibilidad de editarlos en algún momento de requerirlo.
Luego vamos a crear nuestro método main donde llamamos a nuestro método principal que nos retorna el JSON generado, este método es el que va a tomar los datos de la fecha y va a hacer el llamado a un tercer método que se va a encargar de darle el formato necesario a cada elemento dentro de nuestro JSON.
Si compilamos nuestro archivo y luego lo ejecutamos, obtendremos por consola el formato JSON de forma correcta, esto lo podemos ver en la siguiente imagen:
Herramientas adicionales
Lo anterior a pesar que no está mal necesita mucho trabajo para poder sacar elementos que sean válidos en JSON, es por ello que contamos con algunas herramientas que nos pueden ayudar a mejorar el procesamiento y generación de este tipo de documentos.
La más avanzada hasta el momento es Jackson, es una herramienta de terceros que podemos descargar e incorporarla a nuestros proyectos, nos permite crear los elementos de una forma tan sencilla como la siguiente:
String jsonInput ="{\"id\":0,\"nombre\":\"Ramon\",\"Apellido\":\"Perez\"}";Persona q = mapper.readValue(jsonInput, Persona.class);System.out.println("Lectura desde JSON: " + q);Como vemos es algo mucho más resumido que la parte totalmente manual que desarrollamos al inicio.
La siguiente herramienta es org.json que no es tan avanzada como Jackson sin embargo nos da un poco más de forma para generar nuestros documentos JSON, la idea acá es no gastar energía pensando desde el nivel de Java en como ordenar el documento pero dedicarle un poco más de energía a como presentar la información desde el enfoque JSON.
Un ejemplo aplicando esta herramienta puede ser como el siguiente:
JSONObject jsonObject = new JSONObject();jsonObject.put("Nombre", "Ramon Perez").put("País", "España").put("Edad", "24");String documento = jsonObject.toString();System.out.println(documento);Como vemos no tuvimos que generar etiquetas de cierre o de apertura, y tampoco tuvimos que hacer escapes para las diferentes cadenas de texto.
XML
El formato XML es un viejo conocido para muchos y para otros puede verse como algo en desuso, pero la realidad es que tiene mucha vigencia aún y quizás en el futuro. Uno de sus campos de aplicaciones actuales es en las aplicaciones Android por lo que seguramente lo hemos visto o lo veremos.
Al igual que en el caso de JSON este método es un poco rudimentario pero nos sirve para demostrar como desde Java podemos lograr los objetivos propuestos. Veamos en el siguiente código de ejemplo como podemos hacer un documento XML a partir de un DOM.
package xml;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Node;import javax.xml.transform.*;import javax.xml.transform.dom.*;import javax.xml.transform.stream.*;public class XmlManual { public static void main(String[] av) throws Exception { Document doc = generarDocumento(); System.out.println("Iniciando el documento"); Transformer tx = TransformerFactory.newInstance().newTransformer(); tx.setOutputProperty(OutputKeys.INDENT, "yes"); tx.transform(new DOMSource(doc), new StreamResult(System.out));} public static Document generarDocumento() { try { DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance(); DocumentBuilder parser = fact.newDocumentBuilder(); Document documento = parser.newDocument(); Node root = documento.createElement("Persona"); documento.appendChild(root); Node cuerpo = documento.createElement("Estudiante"); root.appendChild(cuerpo); Node line = documento.createElement("España"); cuerpo.appendChild(line); cuerpo.appendChild(line); line.appendChild(documento.createTextNode("Otro contenido")); return documento; } catch (Exception ex) { System.err.println("Ha Ocurrido un error: "); System.err.println(ex.getClass()); System.err.println(ex.getMessage()); return null; } }}Con este ejercicio podemos obtener un entendimiento un poco más avanzado de lo que significa incorporar formatos como XML en el mundo de Java.
Otras herramientas
Al ser un formato con tanta historia y utilidad hace que sea factible encontrar muchas herramientas diseñadas para el lenguaje, es por ello que basta con solo pasearse un poco por Google para encontrar algunas joyas que pueden hacer nuestra vida más sencilla.
Entre estas herramientas encontramos:
- SAX
- XSLT
- JAXB
Es importante no dejar de practicar para poder asimilar todo este conocimiento, y buscar las mínimas oportunidades para implementar nuestras soluciones a los desarrollos. Con esto finalizamos este tutorial, ya hemos aprendido de forma básica pero bastante completa como podemos construir JSON y XML en nuestros programas escritos en Java.