¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Cómo convertir Xml a Json en Java sin problemas con Arrays

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 66 Vistas
0
Cargando...

¡Hola Gurus!

Estoy teniendo problemas para describir un código Java para convertir Xml a Json.

He visto algunos códigos en blogs, pero todos estos códigos tienen problemas con Arrays.

Este es mi objetivo:

Pero mi código Java está generando este Json:

¿Alguien puede ayudarme con alguna idea de cómo puedo crear este código correctamente? ¡Lo apreciaré!

jsonpi.png json.png
Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Hola,

Aunque esta es una pregunta antigua, me gustaría responderla.

Para lograr el formato JSON requerido, tienes 2 alternativas:

1) Instalar un adaptador personalizado y usarlo en el canal receptor Rest como se menciona aquí .

2) Utilizar un mapeo Java personalizado para convertir el XML en la estructura JSON deseada como se menciona aquí .

Saludos,

Kiran Roy

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

¡Hola Sugata!

Tengo el mismo código que creaste.

   package Xml2Json;
   import java.io.BufferedReader;
   import java.io.FileInputStream;
   import java.io.FileOutputStream;
   import java.io.IOException;
   import java.io.InputStream;
   import java.io.InputStreamReader;
   import java.io.OutputStream;
   import java.io.StringWriter;
   import java.util.Map;
   
   import javax.xml.parsers.DocumentBuilder;
   import javax.xml.parsers.DocumentBuilderFactory;
   import javax.xml.transform.OutputKeys;
   import javax.xml.transform.Transformer;
   import javax.xml.transform.TransformerFactory;
   import javax.xml.transform.dom.DOMSource;
   import javax.xml.transform.stream.StreamResult;
   
   import org.json.JSONObject;
   import org.json.XML;
   import org.w3c.dom.Document;
   import org.w3c.dom.Node;
   
   import com.sap.aii.mapping.api.AbstractTransformation;
   import com.sap.aii.mapping.api.StreamTransformationException;
   import com.sap.aii.mapping.api.TransformationInput;
   import com.sap.aii.mapping.api.TransformationOutput;
   
   public class MakeItJSON extends AbstractTransformation {
   
       public static int PRETTY_PRINT_INDENT_FACTOR = 4;
   
       public MakeItJSON() {}
   
       public void transform(TransformationInput in, TransformationOutput out) throws StreamTransformationException {
           try {
               String sourcexml = "";
               String targetfile = "";
               String line = "";
   
               InputStream ins = in.getInputPayload().getInputStream();
               BufferedReader br = new BufferedReader(new InputStreamReader(ins));
   
               while ((line = br.readLine()) != null) {
                   sourcexml = sourcexml + line;
               }
   
               JSONObject jsonObject = XML.toJSONObject(sourcexml);
               String jsonPrettyPrintString = jsonObject.toString(PRETTY_PRINT_INDENT_FACTOR);
   
               targetfile = jsonPrettyPrintString;
   
               out.getOutputPayload().getOutputStream().write(targetfile.getBytes());
           } catch (Exception e) {
               e.printStackTrace();
           }
       }
   }
  

Pero si agrego más "elementos", el código JSON no crea todos los elementos.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Puedes usar el archivo jar externo JSONObject.jar. He proporcionado un código de muestra que toma dos nodos de prueba bajo un nodo raíz y los convierte en un JSON Array -

package com.sap.XML2JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.XML;

public class XML2JSONArray
{

     public static int PRETTY_PRINT_INDENT_FACTOR = 4;
        public static String TEST_XML_STRING =
            "<?xml version=\"1.0\" ?><root><test attrib=\"jsontext\">abctest</test><test attrib=\"jsontext2\">deftest</test></root>";

        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());
            }
        }
    }

    

and here is the output - 
{"root": {"test": [
    {
        "attrib": "jsontext",
        "content": "abctest"
    },
    {
        "attrib": "jsontext2",
        "content": "deftest"
    }
]}}

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

¿Podrías compartir la solución a este problema, por favor?

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?