2009-12-01 25 views
117

¿Cuáles son algunas buenas herramientas para convertir rápida y fácilmente XML a JSON en Java?Forma más rápida de convertir XML a JSON en Java

+0

no puedo usar XML di directamente debido a un requisito en la especificación, pero estoy de acuerdo con usted. ¡Gracias! – BeachRunnerFred

+0

@BeachRunnerJoe: ¿Qué importación necesito escribir? 'import net.sf.json.JSONObject;' o 'import org.json.JSONObject;'. ¿Qué tarro necesito incluir? –

+0

Muchas gracias por su pregunta –

Respuesta

126

JSON in Java tiene excelentes recursos.

Maven dependencia:

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

XML.java es la clase que usted está buscando:

import org.json.JSONObject; 
import org.json.XML; 

public class Main { 

    public static int PRETTY_PRINT_INDENT_FACTOR = 4; 
    public static String TEST_XML_STRING = 
     "<?xml version=\"1.0\" ?><test attrib=\"moretest\">Turn this to JSON</test>"; 

    public static void main(String[] args) { 
     try { 
      JSONObject xmlJSONObj = XML.toJSONObject(TEST_XML_STRING); 
      String jsonPrettyPrintString = xmlJSONObj.toString(PRETTY_PRINT_INDENT_FACTOR); 
      System.out.println(jsonPrettyPrintString); 
     } catch (JSONException je) { 
      System.out.println(je.toString()); 
     } 
    } 
} 

salida es:

{"test": { 
    "attrib": "moretest", 
    "content": "Turn this to JSON" 
}} 
+13

Advertencia: ¡El paquete json.org.XML no existe en Android! –

+2

@danieltalsky: ¿Qué importación necesito escribir? 'import net.sf.json.JSONObject;' o 'import org.json.JSONObject;'. ¿Qué tarro necesito incluir? –

+2

descargue todos los archivos, no solo XML.java. Desde aquí: https://github.com/douglascrockford/JSON-java/downloads – Spiff

2

No sé lo que problema exacto es decir, pero si recibe XML y desea devolver JSon (o algo) también puede consultar JAX-B. Este es un estándar para ordenar/desasignar Java POJO a XML y/o Json. Existen múltiples bibliotecas que implementan JAX-B, por ejemplo, CXF de Apache.

22

El único problema con JSON in Java es que si su XML tiene un único elemento secundario, pero es una matriz, lo convertirá en un objeto en lugar de en una matriz. Esto puede causar problemas si dinámicamente siempre convierte de XML a JSON, donde si su XML de ejemplo tiene solo un elemento, devuelve un objeto, pero si tiene 2+, devuelve una matriz, lo que puede causar problemas de análisis para las personas que usan el JSON.

La clase Infoscoop XML2JSON tiene una forma de etiquetar elementos que son matrices antes de realizar la conversión, de modo que las matrices se pueden asignar correctamente, incluso si solo hay un elemento secundario en el XML.

Aquí está an example de usarlo (en un lenguaje ligeramente diferente, pero también se puede ver cómo se utilizan las matrices desde el método nodelist2json() del enlace XML2JSON).

+0

estamos usando una biblioteca "xml-to-json" en python y este es un problema semántico. Lo que hacemos para resolver este problema de "matriz u objeto" es escribir un método "tryConvertToArray()", que devuelve una matriz con el único objeto en ella. Por lo tanto, siempre puedes confiar en que tu valor sea una matriz – kommradHomer

+0

No me queda claro cómo se resuelve el problema. ¿Entonces simplemente haces que todo sea una matriz en lugar de un objeto? Por ejemplo, si tengo el XML ' ', tendría que generar ' { "resultados": { "resultado": { "valor": "1"}}} ' o ' {"results": [{"result": {"value": "1"}}]} ' – Marcus

+0

Hay algo que esperamos que sea una matriz. El problema surge cuando esta matriz tiene solo 1 elemento, lo que lo convierte en un objeto para el convertidor xml-to-json. Entonces, como esperamos que sea una matriz para un solo elemento, lo revisamos y lo convertimos en una matriz, asegurándonos de tener una matriz donde esperamos una matriz. – kommradHomer

45

Para convertir un archivo XML en JSON para incluir la siguiente dependencia

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

y puedes Download Jar from Maven Repository here. luego implementar como:

String soapmessageString = "<xml>yourStringURLorFILE</xml>"; 
JSONObject soapDatainJsonObject = XML.toJSONObject(soapmessageString); 
System.out.println(soapDatainJsonObject); 
+5

+ para la dependencia de maven siempre que – zacheusz

+2

use la versión de json mencionada en la publicación si está en java 7 ya que la última versión arroja errores extraños. – urug

+0

Si tiene un archivo dtd válido para el fragmento xml, puede convertir fácilmente xml en json y json en xml utilizando el jar de enlace de eclipse de código abierto. Muestra detallada del proyecto JAVA se puede encontrar aquí: http: //www.cubicrace.com/2015/06/How-to-convert-XML-to-JSON-format.html –

1

He encontrado esta la forma más rápida y fácil: Usado: clase org.json.XML de java-json.jar

 if (statusCode == 200 && inputStream != null) { 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); 
      StringBuilder responseStrBuilder = new StringBuilder(); 

      String inputStr; 
      while ((inputStr = bufferedReader.readLine()) != null) { 
       responseStrBuilder.append(inputStr); 
      } 

      jsonObject = XML.toJSONObject(responseStrBuilder.toString()); 
     } 
Cuestiones relacionadas