Saltar al contenido principal

XML to JSON

Convierte XML en JSON conservando los atributos.

Entrada XML

Lín 1, Col 1
XML

Resultado

Tu resultado aparecerá aquí

Añade XML arriba y elige Convertir.

Añade XML a la izquierda y elige Convertir.

Esperando entrada

2 espacios

Convierte XML a JSON, con los atributos como claves que empiezan por @ y los elementos repetidos reunidos en arrays, para conservar la estructura.

¿Qué es XML to JSON?

XML to JSON es una herramienta en línea gratuita que convierte XML en JSON en tu navegador, conservando su estructura: el elemento raíz pasa a ser el nombre del nivel superior, los atributos pasan a ser nombres que empiezan por @ y los elementos que se repiten pasan a ser una lista.

Lee un documento XML bien formado y rechaza el que no lo sea, indicando dónde está el primer problema. Nunca se carga nada a lo que el XML haga referencia.

Qué admite

  • Un documento XML bien formado, con un único elemento raíz. La declaración XML, los comentarios y las instrucciones de procesamiento se aceptan y se dejan fuera del JSON.
  • El nombre del elemento raíz es el único nombre del nivel superior del resultado, como en {"library": …}. Los prefijos de espacio de nombres se conservan en los nombres (n:child), y las declaraciones de espacio de nombres se escriben como atributos (@xmlns:n).
  • Un elemento con solo texto pasa a ser un texto JSON. Un elemento sin texto, sin atributos y sin hijos pasa a ser null.
  • Los atributos pasan a ser nombres que empiezan por @, escritos primero y en el orden en que aparecen.
  • El texto que está junto a atributos o a elementos hijos va a #text. El texto se recorta por los dos extremos, y los fragmentos de texto separados por elementos hijos se unen con un espacio. Las secciones CDATA se leen como texto simple, y las cinco entidades predefinidas (&, <, >, " y ') y las referencias numéricas, como A, se decodifican.
  • Los elementos hijos con el mismo nombre pasan a ser una lista, colocada donde aparece el primero. Un elemento que aparece una vez sigue siendo un valor único. Los elementos se agrupan por nombre, así que los hermanos que se alternan, como a b a, salen como una lista a seguida de b.
  • Todo valor es texto, porque XML no tiene tipos: 12.50 y true siguen siendo texto.

Conviene saber

  • La conversión no se puede revertir con certeza. XML no dice si un elemento es una lista de uno o un valor único, así que un elemento que aparece una vez es un valor único y solo los elementos repetidos pasan a ser una lista. El código que lee el JSON debe aceptar ambos casos.
  • Los comentarios, las instrucciones de procesamiento y la declaración XML se descartan, y también la posición del texto entre los elementos hijos.
  • Un DOCTYPE se lee, pero nunca se sigue. Una entidad personalizada que declara no se expande, y la referencia a ella se rechaza en lugar de quedarse en el texto. No se carga nada a lo que el DOCTYPE haga referencia.
  • El XML debe estar bien formado: etiquetas que coinciden, una sola raíz, atributos entre comillas, sin < ni & sueltos. Un documento nunca se repara, y el primer problema se indica con su línea y su columna. Se rechazan varios elementos seguidos sin una raíz común.
  • Los espacios de nombres se comprueban, pero no se interpretan. Un prefijo debe estar declarado, pero sigue siendo parte del nombre, así que dos prefijos para el mismo espacio de nombres dan dos nombres distintos.

¿Cómo se usa XML to JSON?

  1. Pega o escribe tu XML en el cuadro de entrada. No se ejecuta nada mientras escribes.
  2. Elige la sangría («2 espacios» o «4 espacios») y pulsa «Convertir».
  3. Lee el JSON junto a tu entrada. Si el XML no está bien formado, o si se rechaza la conversión, el mensaje explica el motivo e indica la línea y la columna.
  4. Pulsa «Copiar» para poner el JSON en el portapapeles, o «Descargar» para guardarlo como converted.json.

Ejemplos

Elementos y atributos

Pega este XML y pulsa «Convertir». El elemento raíz, library, pasa a ser el único nombre del nivel superior. Los dos elementos book tienen el mismo nombre, así que pasan a ser una lista. Los atributos id y lang pasan a ser los nombres @id y @lang, escritos antes de los elementos hijos, y el texto de title y author pasa a ser un texto simple.

<library>
  <book id="1" lang="en">
    <title>Dune</title>
    <author>Frank Herbert</author>
  </book>
  <book id="2" lang="en">
    <title>Emma</title>
    <author>Jane Austen</author>
  </book>
</library>
{
  "library": {
    "book": [
      {
        "@id": "1",
        "@lang": "en",
        "title": "Dune",
        "author": "Frank Herbert"
      },
      {
        "@id": "2",
        "@lang": "en",
        "title": "Emma",
        "author": "Jane Austen"
      }
    ]
  }
}

Una etiqueta de cierre que no coincide

El elemento b sigue abierto cuando llega la etiqueta de cierre </a>, así que el XML no está bien formado y no se convierte nada. El mensaje indica la línea y la columna de la etiqueta de cierre.

<a><b></a>

Esta etiqueta de cierre no coincide con el elemento que está abierto. Las etiquetas de cierre deben ser idénticas a las de apertura, también en mayúsculas y minúsculas, y cerrarse en orden inverso.

Línea 1, columna 7

Texto junto a atributos y elementos vacíos

El texto de total está junto a un atributo, así que pasa a un nombre llamado #text, y total pasa a ser un objeto con @currency y #text. El elemento vacío note pasa a ser null, y el atributo id de order se escribe como @id antes de los hijos.

<order id="7"><total currency="BRL">12.50</total><note/></order>
{
  "order": {
    "@id": "7",
    "total": {
      "@currency": "BRL",
      "#text": "12.50"
    },
    "note": null
  }
}

Texto mezclado con elementos

Cuando un elemento contiene a la vez texto y elementos hijos, los fragmentos de texto se unen con un espacio bajo #text, y los elementos hijos conservan sus propios nombres. No se conserva la posición del texto entre los hijos.

<p>Hello <b>big</b> world</p>
{
  "p": {
    "#text": "Hello world",
    "b": "big"
  }
}

Una entidad de un DOCTYPE

El DOCTYPE declara una entidad llamada who. La herramienta lee el DOCTYPE, pero nunca lo sigue, así que no expande &who; y se niega en lugar de omitirla. Solo se expanden las cinco entidades predefinidas (&amp;, &lt;, &gt;, &quot; y &apos;) y las referencias numéricas, como &#65;.

<!DOCTYPE note [<!ENTITY who "Ada">]>
<note>Hi &who;</note>

Esta entidad no es una de las cinco entidades predefinidas de XML (&amp;, &lt;, &gt;, &quot; y &apos;), y esta herramienta no expande las entidades declaradas en un DOCTYPE. Usa una de las cinco o una referencia numérica de carácter.

Línea 2, columna 10

Límites y privacidad

Límites de tamaño

  • Entrada: hasta 2.000.000 bytes de texto en UTF-8 (unos 2 MB). Las letras acentuadas y los emojis ocupan más de un byte cada uno. Una entrada mayor se rechaza.
  • Resultado: también hasta 2.000.000 bytes. Si el resultado completo fuera mayor, la herramienta muestra solo una vista previa incompleta de los primeros 100.000 bytes, y esa vista previa no se puede copiar ni descargar.
  • Anidamiento: hasta 128 niveles de elementos (la raíz es el nivel 1; los elementos con autocierre también cuentan) dentro de otros. Un XML más profundo se rechaza porque supera lo que procesa la herramienta.
  • Tiempo: una ejecución que tarda más que su límite de tiempo se detiene. Prueba con una entrada más pequeña.

¿Se envía mi texto a un servidor?

No. El texto que escribes o pegas, o abres desde un archivo local, se procesa localmente en tu navegador, en un Web Worker dedicado. Nunca se sube ni se envía al servidor (un archivo que abres se lee solo en tu navegador), y no se escribe en el almacenamiento, en cookies ni en la barra de direcciones.

«Copiar» pone el resultado en el portapapeles y «Descargar» lo guarda como archivo, pero solo cuando pulsas el botón. El archivo se crea en tu navegador, así que no se sube nada.

Para conocer todos los detalles, consulta la Política de privacidad

Herramientas y páginas relacionadas

Tu texto se queda en la página cuando cambias de herramienta en la misma pestaña, así que puedes probar el mismo texto en otra. Recargar o cerrar la pestaña lo termina.

Todas las herramientas