FreeToGenerate.com

100% gratis · sin registro · todo en tu navegador

0
Opciones
Sangría

No existe ningún estándar para esta correspondencia, así que esta herramienta sigue la más habitual: los atributos pasan a claves con el prefijo @, y el texto propio de un elemento pasa a #text. Otras herramientas usan convenciones distintas, de modo que el JSON de aquí no siempre se cargará igual en otro sitio.

Todo se ejecuta en tu navegador. No se sube nada.

También disponible en: English · Português · Français · العربية

Convertir XML a JSON

Pega XML y obtén JSON con la convención de @ y #text, además de un informe honesto de todo lo que la conversión ha tenido que dejar por el camino.

Qué implica convertir XML a JSON

XML y JSON describen datos estructurados, pero no tienen la misma forma, y ahí está toda la dificultad. Los elementos XML pueden llevar atributos además de contenido, la misma etiqueta puede repetirse tantas veces como haga falta y el texto puede quedar intercalado entre elementos hijos. JSON tiene objetos, arrays, cadenas, números, booleanos y null, y ninguna noción de atributo. Convertir de uno a otro consiste, por tanto, en decidir cómo escribir las ideas de más que tiene XML con el vocabulario más corto de JSON.

Para esa decisión no hay ningún estándar. El W3C nunca definió una codificación JSON de XML, así que cada herramienta adopta una convención y las convenciones no coinciden. Este conversor usa la más extendida —los atributos pasan a claves con el prefijo @ y el texto propio de un elemento pasa a #text—, que es la que emplean Json.NET de Newtonsoft, xml2js y Spark. Otras difieren: BadgerFish usa $ para el texto y la convención Parker descarta los atributos por completo.

Como el mapeo es una elección y no una regla, esta página dice qué convención usa e informa, para tu documento concreto, de qué piezas no han podido pasar. Eso resulta más útil que un conversor que descarta cosas en silencio y presenta el resultado como si estuviera completo.

Cómo convertir XML a JSON

  1. Pega tu XML en el panel de la izquierda. El JSON aparece a la derecha mientras escribes, sin ningún botón que pulsar. «Cargar un ejemplo» rellena el panel con un pequeño catálogo que muestra atributos, elementos repetidos y un comentario.
  2. Elige con qué rigor leer los valores. Por defecto todos los valores siguen siendo cadenas, porque XML no tiene tipos. Al activar la lectura de tipos, 42 pasa a número y true a booleano, pero cualquier cosa que una ida y vuelta cambiaría —como 01234 o 1.10— se queda como texto.
  3. Lee el informe de pérdidas y copia. Debajo de los paneles, la herramienta enumera lo que la convención no ha podido representar y cuántas veces aparecía. Si dice que no se ha perdido nada, el documento encaja exactamente en la convención. «Copiar resultado» lleva el JSON al portapapeles.

Qué hace la convención con atributos, repeticiones y texto

Un atributo pasa a ser una clave con una @ delante, y eso es justo lo que lo mantiene distinguible de un elemento hijo con el mismo nombre. Sin ese prefijo, un elemento con atributo id y un elemento con un hijo id darían un JSON idéntico, y la conversión de vuelta sería una moneda al aire.

Una etiqueta repetida pasa a array, y una etiqueta que aparece una sola vez se queda como valor suelto. Esa regla es la que casi todo el mundo espera al mirar el resultado, y también es el origen de la única asimetría real entre estos dos formatos: en XML nada marca una lista, así que una lista que da la casualidad de tener un elemento se ve exactamente igual que un valor único.

El texto propio de un elemento pasa a #text cuando ese elemento también tiene atributos o hijos, y pasa a ser directamente el valor cuando no tiene ninguna de las dos cosas. Un elemento vacío pasa a null. Esas decisiones mantienen el caso habitual —un elemento hoja con una cadena— lo más corto posible, en lugar de envolver cada valor en un objeto por uniformidad.

Qué no puede trasladarse, con franqueza

Hay cuatro cosas que no tienen dónde alojarse en la convención, y la herramienta informa de cada una en vez de descartarla en silencio: los comentarios, las instrucciones de procesamiento, la declaración doctype y las secciones CDATA, que llegan como texto normal y por tanto pierden el hecho de haber estado marcadas como texto en bruto.

El contenido mixto es el caso más sutil. Un párrafo con una palabra en negrita dentro de una frase coloca texto antes, entre y después de sus elementos hijos. La convención tiene una única ranura #text, así que el texto sobrevive pero su posición respecto a los elementos no. Si tu XML se parece más a un documento que a un registro, esa es una limitación real y la herramienta te lo dirá.

La dirección contraria tiene su propio agujero, y conviene conocerlo antes de fiarse de una ida y vuelta. Se midió la conversión de JSON a XML y de vuelta sobre unos 1.700 documentos generados: un 72,8% volvió idéntico. Todos los fallos, sin excepción, se debían a exactamente dos causas: un array de un solo elemento, que se escribe como una etiqueta única y se relee como un valor suelto, o un array anidado dentro de otro array, que no tiene forma de escribirse como etiqueta repetida y se aplana. Descontadas esas dos, el residuo sin explicar fue cero, así que los límites son precisamente esos y ningún otro.

Los espacios de nombres se conservan tal como estaban escritos, con prefijo incluido, en lugar de resolverse. El prefijo sigue formando parte del nombre de la clave, así que ns:title pasa a ser la clave ns:title. Eso es fiel al documento, pero implica que quien consuma el JSON tiene que conocer el prefijo, porque JSON no dispone de ningún mecanismo de espacios de nombres que lleve esa correspondencia.

¿Por qué es gratis?

La conversión es un análisis y una reescritura, y ambas ocurren en tu navegador mientras escribes. No se sube nada, así que no hay coste de servidor que recuperar ni motivo para pedirte una cuenta antes de dejarte convertir tu propio documento.

Eso también significa que no hay marca de agua, ni un límite de tamaño puesto ahí para empujarte a pagar, ni un tope de documentos que puedas procesar.