El format per a intercanvi d’informació JSON cada cop s’ha tornat més popular en detriment de XML. Molts serveis web segueixen treballant amb XML, però molts altres ja ho fan només amb JSON. Podem veure’ns en la necessitat de convertir XML a JSON, sobretot en situacions on es vulgui comunicar amb JavaScript, on és molt més fàcil la interpretació d’una cadena JSON.
Una manera ràpida és fent ús de la llibreria JSON in Java, mitjançant el paquet org.json. Aquest paquet es pot descarregar en Github i afegir al classpath de el projecte per poder referenciar, o bé, afegir-lo com una dependència a Maven de la següent manera:
<dependency> <groupId>org.json</groupId> <artifactId>json</artifactId></dependency>
Una de les funcions interessants d’aquest paquet és l’encarregada de convertir d’XML a JSON en si. Aquesta funció es diu xmlStringToJSONString i rep dos paràmetres. El primer és un String amb la cadena de l’XML i el segon és un enter amb el factor d’identación, és a dir, el nombre d’espais amb el qual es identará cada nivell de l’JSON resultant. El contingut d’aquesta funció és el següent.
public static String xmlStringToJSONString(String xmlString, int indentFactor) {JSONObject xmlJSONObj = XML.toJSONObject(xmlString);String string = xmlJSONObj.toString(indentFactor);return string;}
Exemple de com convertir un XML a JSON
A continuació, un senzill exemple de ús d’aquesta funció. En aquest exemple s’ha declarat el contingut de l’XML en una variable (xmlEntrada) i se li passa a la funció encarregada de la conversió, indicant quatre espais de identación. El resultat de la conversió es mostrarà a 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()); }}}
A l’executar el codi anterior, la sortida de la consola seria la següent. Com s’aprecia, és un JSON vàlid, amb quatre espais de identación en cada nivell de la mateixa per facilitar la seva lectura.
{"serviceRequest": { "id": 123, "desc": "Hola"}}