Saltar al contenido

JSON a XML y de vuelta

JSON ⇄ XML

Convierte entre JSON y XML con tratamiento configurable de atributos, arreglos y nodos de texto.

Convierte XML en JSON y viceversa. No hay una correspondencia canónica entre los dos —XML tiene atributos, contenido mixto ordenado y espacios de nombres, y JSON no tiene nada de eso—, así que esta página hace explícitas sus decisiones y te deja cambiarlas en lugar de esconder una convención.

🔒 Se ejecuta por completo en tu navegadorjsonxmlconvert
Dirección

Un atributo queda como `@id`.

Donde va el texto propio de un elemento.

XML

JSON

No hay una correspondencia canónica entre XML y JSON, así que aquí las decisiones están a la vista: un atributo se convierte en una clave como @name y el texto propio de un elemento va a #text, mientras que los hermanos repetidos se convierten en un array. Lo último es donde la ida y vuelta puede perder información: una lista que resulta tener un solo elemento vuelve como un objeto suelto, salvo que «usar siempre arrays» esté activado.

Entrada

215 caracteres

Salida

399 caracteres

Cómo se usa

  1. Elige la dirección

    Los dos lados mantienen entradas separadas, así que cambiar de uno a otro no pierde lo que habías pegado.

  2. Ajusta el prefijo de atributos y la clave de texto

    `@` y `#text` son la convención extendida (fast-xml-parser, xml2js y otros los usan), pero si el JSON que tienes que producir usa otra cosa, cámbialo aquí en lugar de posprocesar.

  3. Activa «usar siempre arreglos» si el JSON va a código

    Esta es la parte con pérdida de la correspondencia: un `<item>` se convierte en un objeto, dos se convierten en un arreglo, y el código que lo consume tiene que manejar ambos casos. Forzar arreglos hace la forma estable a costa de algo de verbosidad.

Preguntas frecuentes

¿El viaje de ida y vuelta me devuelve mi XML?

Estructuralmente normalmente sí, byte a byte no. Los comentarios, las instrucciones de procesamiento y la distinción entre `<a/>` y `<a></a>` no sobreviven, y el contenido mixto —texto y elementos intercalados— no puede representarse en JSON de una manera que conserve el orden.

¿Por qué `12` es una cadena?

Porque XML no tiene tipos: cada valor de un documento es texto, y solo un esquema dice lo contrario. El interruptor Convertir tipos adivinará números y booleanos, pero es una suposición: un código de producto `0123` se convierte en 123, y una cadena de versión `1.10` se convierte en 1.1.

¿Qué pasa con los espacios de nombres?

Los prefijos se conservan como parte del nombre del elemento —`soap:Body` se convierte en la clave `soap:Body`— y las declaraciones `xmlns` pasan como atributos ordinarios. Nada se resuelve a un URI de espacio de nombres, así que dos documentos que usan prefijos distintos para el mismo espacio de nombres producen JSON distinto.

¿Puedo darle una respuesta SOAP?

Sí, y esa es una de las razones comunes para estar aquí. El sobre, el cuerpo y la carga útil pasan todos como objetos anidados; las claves `@` son donde acaban los atributos de SOAP.

Puede recibir de

Después

Estas aceptan lo que produce esta herramienta, así que el resultado puede pasar directamente.