O formato para o intercambio de información JSON cada vez volveuse máis popular en detrimento de XML. Moitos servizos web seguen a traballar con XML, pero moitos outros xa o fan só con JSON. Podemos vernos na necesidade de converter XML a JSON, especialmente en situacións nas que desexa comunicarse con JavaScript, onde a interpretación dunha cadea JSON é moito máis sinxela.
Un xeito rápido é usar o JSON na biblioteca Java, usando o paquete ORG.JSON. Este paquete pode descargarse en GitHub e engadilo ao proxecto Classpath para poder referilo ou engadilo como unha dependencia de maven do seguinte xeito:
<dependency> <groupId>org.json</groupId> <artifactId>json</artifactId></dependency>
Unha das funcións interesantes deste paquete é responsable da conversión de XML a JSON. Esta función chámase XMLstringtojsonstring e recibe dous parámetros. O primeiro é unha cadea coa cadea XML eo segundo é un número enteiro co factor de identificación, é dicir, o número de espazos cos que se identificará cada nivel do JSON resultante. O contido desta función é o seguinte.
public static String xmlStringToJSONString(String xmlString, int indentFactor) {JSONObject xmlJSONObj = XML.toJSONObject(xmlString);String string = xmlJSONObj.toString(indentFactor);return string;}
Exemplo de como converter un XML a JSON
A continuación, un exemplo sinxelo de Uso desta función. Neste exemplo, o contido do XML foi declarado nunha variable (XMLentrada) e pasa á función responsable da conversión, indicando catro espazos de identificación. O resultado da conversión mostrarase na 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()); }}}
Ao executar o código anterior, a saída da consola sería a seguinte. Como se pode ver, é un JSON válido, con catro espazos de identificación en cada nivel que facilite a súa lectura.
{"serviceRequest": { "id": 123, "desc": "Hola"}}