Ir al contenido principal
PulsarKit

Convertir XML a JSON

Convierte XML en JSON y decide cómo tratar atributos, CDATA y espacios de nombres, con errores de sintaxis que indican la línea exacta.

Suelta tus archivos aquí

.xml, .rss, .svg, .xhtml, .txt · hasta 300 MB

Atributos
Más ajustes

Cómo convertir a JSON

  1. 1

    Suelta un archivo XML

    Añade un archivo o hasta veinte. Fuentes RSS, dibujos SVG y páginas XHTML también son XML y se leen de la misma forma.

  2. 2

    Elige cómo mapear atributos y repeticiones

    Los atributos pueden llevar un prefijo, agruparse bajo una sola clave o ignorarse, y las etiquetas repetidas pueden convertirse siempre en arrays o solo cuando realmente se repiten.

  3. 3

    Convierte y descarga el JSON

    Pulsa el botón y guarda el resultado con sangría. Un lote de archivos se devuelve como un único archivo ZIP.

Un elemento o una lista de uno

La parte incómoda de cualquier mapeo de XML a JSON es una lista con un solo elemento: <order> con tres elementos <item> obviamente se convierte en un array, pero el mismo documento con un solo item parece un objeto plano y el código que itera sobre él se rompe con el primer cliente real. Por eso la regla de arrays es un ajuste explícito y no una heurística oculta, y por eso puedes forzar que todos los hijos se conviertan en arrays.

Números que no son números

La tipificación automática convierte 42 en un número y true en un booleano, que suele ser lo que quieres y a veces un desastre. Un código de pieza 00123 no debe convertirse en 123, y un identificador fiscal de veinte dígitos no debe redondearse ni pasar a notación científica. Los valores con ceros a la izquierda y las cadenas de dígitos de más de quince caracteres por tanto se mantienen como cadenas, y si desactivas la tipificación cada valor se conserva exactamente como está escrito.

Se rechazan las entidades declaradas

Un DOCTYPE que contiene una declaración <!ENTITY> se rechaza antes de empezar a analizarlo. Diez entidades anidadas, cada una que hace referencia a la anterior diez veces, se expanden en gigabytes de texto y bloquean la pestaña, el clásico billion laughs. Aquí no se expande nada más allá de las cinco entidades predefinidas y las referencias numéricas de carácter, así que el ataque no tiene en qué desplegarse.

Se analiza aquí, no en otro sitio

El analizador se ejecuta en tu navegador, en un hilo de trabajo, con el código que viene con la página. Tu XML nunca se sube, así que no hay copia en el servidor que borrar, ni cola de espera, ni registro del que preocuparse. Cuando cierras la pestaña, el documento y el JSON generado a partir de él desaparecen.

Preguntas frecuentes

¿Dónde acaban los atributos XML en el JSON?

De forma predeterminada cada atributo se convierte en una clave en el mismo objeto que los hijos del elemento, con el prefijo @_ para que no choque con una etiqueta hija del mismo nombre. También puedes agrupar todos los atributos en un subobjeto @attributes, que mantiene limpio el contenido del elemento, o eliminar los atributos por completo.

¿Por qué un único elemento repetido no es un array?

Porque en el documento no pone en ningún sitio que sea una lista. Con la regla predeterminada, una etiqueta se convierte en array solo cuando en realidad aparece más de una vez bajo el mismo padre, lo que refleja el archivo de forma exacta. Si quien consume el JSON necesita una forma fija, cambia el ajuste de arrays a siempre para que incluso un único hijo llegue como un array de uno.

¿Qué pasa con las secciones CDATA?

De forma predeterminada el contenido de CDATA se fusiona con el texto del elemento, porque CDATA es solo una forma de entrecomillar y no un tipo de dato distinto. Si necesitas saber qué parte de un valor se citó así, por ejemplo al volver a emitir XML más tarde, cambia a separado y acabará en su propia clave #cdata.

¿Puedo quitar los prefijos de espacio de nombres?

Sí. Quitar los espacios de nombres convierte dc:title en title, lo que hace que fuentes y formatos de documentos sean mucho más fáciles de manejar en código. Déjalo activado si dos espacios de nombres distintos usan el mismo nombre local en el mismo archivo, porque entonces el prefijo es lo único que mantiene separadas las claves.

¿Por qué recibo un error sobre entidades personalizadas?

Porque un documento que declara sus propias entidades en el DOCTYPE se rechaza en lugar de expandirse. Es la única defensa fiable contra bombas de expansión de entidades, que pueden convertir unos pocos kilobytes en gigabytes de memoria. Elimina el bloque DOCTYPE y el resto del documento se convierte con normalidad.

¿Funcionan fuentes RSS y archivos SVG?

Sí, ambos son XML normal. Una fuente RSS se convierte en un objeto de metadatos del canal con un array de elementos, que es una forma cómoda de trabajar. Un SVG se convierte en su árbol de elementos con todos los atributos de presentación intactos, útil para inspeccionar o reescribir dibujos por código.

¿Qué pasa si el XML tiene un error de sintaxis?

Obtienes la línea, la columna y la etiqueta implicada, por ejemplo se esperaba etiqueta de cierre en la línea 214, columna 5, en lugar de un simple fallo de análisis. En un archivo con decenas de miles de elementos esa diferencia es clave, porque te dice dónde mirar.

¿Se sube mi archivo a algún sitio?

No. La decodificación, la validación y la conversión se ejecutan localmente en la pestaña de tu navegador. No hay ningún servidor implicado en ninguna fase, así que no queda ninguna copia de tu documento en ningún sitio cuando cierras la página.

Herramientas relacionadas