Convertir XML a JSON en Java

El formato para intercambio de información JSON cada vez se ha vuelto más popular en detrimento de XML. Muchos servicios web siguen trabajando con XML, pero muchos otros ya lo hacen sólo con JSON. Podemos vernos en la necesidad de convertir XML a JSON, sobretodo en situaciones donde se quiera comunicar con JavaScript, donde es mucho más fácil la interpretación de una cadena JSON.

Una manera rápida es haciendo uso de la librería JSON in Java, mediante el paquete org.json. Este paquete se puede descargar en Github y agregarlo en el classpath del proyecto para poder referenciarlo, o bien, añadirlo como una dependencia en Maven de la siguiente manera:

<dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
</dependency>

Una de las funciones interesantes de este paquete es la encargada de convertir de XML a JSON en sí. Dicha función se llama xmlStringToJSONString y recibe dos parámetros. El primero es un String con la cadena del XML y el segundo es un entero con el factor de identación, es decir, el número de espacios con el cual se identará cada nivel del JSON resultante. El contenido de esta función es el siguiente.

public static String xmlStringToJSONString(String xmlString, int indentFactor) {
	JSONObject xmlJSONObj = XML.toJSONObject(xmlString);
	String string = xmlJSONObj.toString(indentFactor);
	return string;
}

Ejemplo de cómo convertir un XML a JSON

A continuación, un sencillo ejemplo de uso de esta función. En este ejemplo se ha declarado el contenido del XML en una variable (xmlEntrada) y se le pasa a la función encargada de la conversión, indicando cuatro espacios de identación. El resultado de la conversión se mostrará en la consola.

import org.json.JSONException;
import org.junit.Test;
public class Xml2JSONTests
{
	public void testXml2JSON() throws Exception
	{
		String xmlEntrada = "<?xml version=\"1.0\" ?>" +
			"<serviceRequest><id>123</id><desc>Hola</desc></serviceRequest>";
	        try {
        		System.out.println(xmlStringToJSONString(xmlEntrada, 4));
        	} catch (JSONException je) {
            	System.out.println(je.toString());
        	}
	}
}

Al ejecutar el código anterior, la salida de la consola sería la siguiente. Como se aprecia, es un JSON válido, con cuatro espacios de identación en cada nivel del mismo para facilitar su lectura.

{"serviceRequest": {
    "id": 123,
    "desc": "Hola"
}}

Con las mismas librerías, se podría hacer el paso contrario: convertir a XML, aunque suele ser menos habitual con el uso de servicios REST.

Deja un comentario

Pin It on Pinterest