¿Cómo convertir XML a JSON usando solo Jackson?

Recibo una respuesta del servidor como XML. Pero necesito mostrar esto en formato JSON.

¿Hay alguna forma de convertirlo sin una API de terceros? Utilicé a Jackson, pero para esto necesito crear POJO.

La respuesta del servidor es así:

 400The field 'quantity' is invalid.
The quantity specified is greater than the quantity of the product that is available to ship.012525

Usando Jackson 2.x

Puedes hacer eso con Jackson y no se requieren POJO para eso:

 String xml = "\n" + "\n" + " \n" + " 400\n" + " The field 'quantity' is invalid.\n" + " 
\n" + " The quantity specified is greater than the quantity of the product that is available to ship.\n" + " 0\n" + " 12525\n" + "
\n" + "
\n" + "
"; XmlMapper xmlMapper = new XmlMapper(); JsonNode node = xmlMapper.readTree(xml.getBytes()); ObjectMapper jsonMapper = new ObjectMapper(); String json = jsonMapper.writeValueAsString(node);

Se requieren las siguientes dependencias:

  com.fasterxml.jackson.core jackson-core 2.8.2   com.fasterxml.jackson.core jackson-databind 2.8.2   com.fasterxml.jackson.core jackson-annotations 2.8.2   com.fasterxml.jackson.dataformat jackson-dataformat-xml 2.8.2  

Tenga en cuenta las limitaciones de XmlMapper establecidas en la documentación :

El Modelo de árbol solo se admite de manera limitada: específicamente, las matrices y Collections Java se pueden escribir, pero no se pueden leer, ya que no es posible distinguir matrices y objetos sin información adicional.

Usando JSON.org

También puedes hacerlo con JSON.org:

 String xml = "\n" + "\n" + " \n" + " 400\n" + " The field 'quantity' is invalid.\n" + " 
\n" + " The quantity specified is greater than the quantity of the product that is available to ship.\n" + " 0\n" + " 12525\n" + "
\n" + "
\n" + "
"; String json = XML.toJSONObject(xml).toString();

Se requiere la siguiente dependencia:

  org.json json 20160810  

¿Hay alguna forma de convertir xml a json sin usar ninguna API de terceros?

Si eres práctico, no, no lo es.

El paso de analizar el XML se puede realizar utilizando API que son parte de Java SE. Sin embargo, pasar del XML analizado (por ejemplo, un DOM) a JSON requiere una biblioteca de soporte JSON, y Java SE no incluye uno.

(En teoría, podrías escribir una biblioteca así, pero ¿de qué sirve hacer eso?)


Utilicé a Jackson, pero para esto necesito crear POJO.

@Cassio señala que Jackson le permite hacer esta traducción sin escribir POJO. Alternativamente, mire otras API de JSON (de terceros) para Java; ver http://www.json.org para una lista de alternativas. Algunos de los más simples no implican definir POJOs

 package com.src.test; import java.io.IOException; import java.io.InputStream; import java.net.URL; import org.apache.commons.io.IOUtils; import net.sf.json.JSON; import net.sf.json.xml.XMLSerializer; public class JSONConverter { private static URL url = null; private static InputStream input = null; public static void main(String args[]) throws IOException { try { url = JSONConverter.class.getClassLoader().getResource("sampleXmlFilePath.xml"); input = url.openStream(); String xmlData = IOUtils.toString(input); XMLSerializer xmlSerializer = new XMLSerializer(); JSON json = xmlSerializer.read(xmlData); System.out.println("JSON format : " + json); } catch (Exception e) { e.printStackTrace(); } finally { input.close(); } } }