No existe un mapeo estándar entre los dos. XML 1.0 tiene atributos, espacios de nombres, contenido mixto ordenado y comentarios; RFC 8259 tiene seis tipos y ningún atributo. Cada convertidor inventa su propio puente, por lo que dos de ellos no están de acuerdo.
La integración que me enseñó a respetar la conversión de XML a JSON fue una API de transporte de envíos. El resto moderno en todas partes de la pila, y luego este punto final heredado que hablaba SOAP y devolvía sobres de XML que necesitaba doblar en una canalización JSON. "Es solo XML a JSON", pensé, y busqué un convertidor de una línea. Entonces llegaron los casos de borde: un <Package> Elemento que a veces era un solo objeto y, a veces, una lista, dependiendo de cuántos paquetes estuvieran en el pedido. una id Atributo que mi ingenuo conversor se descargó por completo porque solo miraba el texto del elemento. un <Description> envuelto en CDATA porque contenía un signo comercial. Cada uno de estos corrompió silenciosamente los datos: el JSON salió con apariencia plausible y estaba equivocado en formas que solo mostraban tres servicios posteriores.
Parece que XML y JSON deberían convertirse trivialmente entre sí, y no lo hacen 't, porque modelan datos con diferentes primitivas. JSON tiene objetos, matrices, cadenas, números, booleanos y nulo, un conjunto pequeño y limpio. XML tiene elementos, atributos, nodos de texto, contenido mixto, espacios de nombres, CDATA, comentarios e instrucciones de procesamiento, y lo más importante es que los tiene Sin arreglos y Sin tipos. Entonces, un convertidor tiene que tomar decisiones de que un formato sin pérdidas: ¿a dónde van los atributos cuando JSON no tiene ningún concepto de ellos? ¿Cómo se nota un solo elemento de una lista de un elemento cuando XML marca ambos de la misma manera? ¿Qué sucede con un elemento que tiene tanto atributos como texto?
una Convertidor XML a JSON Lo que toma esas decisiones de manera deliberada y consistente es la diferencia entre una integración limpia y una semana de depuración posterior. El que construí para Toolz.dev asigna atributos a claves con prefijo para que no se pierda nada, colapsa etiquetas repetidas en matrices JSON para preservar la estructura, mantiene texto de contenido mixto bajo una clave dedicada y lee CDATA palabra por palabra. Y lo hace todo con un analizador sin dependencia que se ejecuta en su navegador, lo cual es importante porque las cargas útiles de integración son exactamente el tipo de datos que debe & 39;t cargar en un servidor extraño & # 39;s.
Esta guía cubre cómo la conversión maneja las peculiaridades estructurales de XML, cuando los elementos repetidos se convierten en matrices, cómo lidiar con los atributos y los espacios de nombres, y los flujos de trabajo SOAP y RSS donde esta conversión ocurre constantemente.
TL;Dr: Pegue XML en el Convertidor XML a JSON Toolz.dev, elija sangría y obtenga JSON limpios donde los atributos se convierten
@-Claves prefijadas, etiquetas repetidas se convierten en matrices, el texto de contenido mixto se encuentra debajo#text, y cdata se lee textualmente. Girar de análisis de tipo opcional"44.95"en un número real. Utiliza un analizador sin dependencias, ejecuta 100% del lado del cliente, por lo que las cargas útiles de SOAP e integración nunca se cargan, y se empareja con JSON a YAM y el Formateador JSON para el siguiente paso en su canalización.
¿Por qué XML a JSON no es un simple mapeo uno a uno?
La intuición de que XML y JSON son intercambiables proviene de su trabajo compartido (representar datos estructurados) y de rupturas en sus diferentes componentes básicos. La falta de coincidencia aparece en cuatro lugares específicos, y la calidad de un convertidor 's se trata completamente de cómo los maneja.
Los atributos no tienen equivalente JSON. <book id="bk101">War and Peace</book> tiene un atributo (id) y contenido de texto (War and Peace). JSON no tiene noción de atributo; todo es un par clave-valor. Un convertidor debe inventar una convención, y la más extendida es anteponer claves de atributos { "book": { "@id": "bk101", "#text": "War and Peace" } }. Suelta los atributos, como hacen los convertidores ingenuos, y has perdido datos silenciosamente.
JSON tiene matrices; XML no. En XML, una lista es la misma etiqueta repetida: tres <item> elementos bajo un solo padre. Pero un solo <item> parece estructuralmente idéntico a una lista de uno. JSON necesita saber si emitir un objeto o una matriz, y la única señal disponible es la ocurrencia, por lo que las etiquetas repetidas se convierten en matrices y las etiquetas individuales permanecen como objetos.
Contenido mixto. Un elemento puede contener elementos secundarios y texto suelto. Los objetos JSON no pueden representar naturalmente "Este objeto también tiene un valor de cadena desnuda", por lo que el texto se encuentra bajo una clave reservada como #text.
Los tipos no existen en XML. Cada valor en XML es texto. <price>44.95</price> es la cadena "44.95", no un número, a menos que un conversor decida coaccionarlo, y esa elección puede ser incorrecta, porque <zip>08544</zip> Debe permanecer en una cuerda o perder su cero inicial.
los convertidor maneja cada uno de estos explícitamente en lugar de fingir que no existen. Por eso, la salida se mantiene fiel a la fuente en lugar de eliminar silenciosamente las partes de XML para las que JSON no tiene espacio.
¿Cuándo se convierten los elementos repetidos en matrices?
Esta es la parte más confusa de la conversión de XML a JSON, y vale la pena entenderlo en lugar de sorprenderse. La regla la convertidor Usos está basado en sucesos: dentro de un padre determinado, si aparece un nombre de etiqueta más de una vez, sus valores se desploman en una matriz JSON; si aparece exactamente una vez, permanece un solo objeto o valor.
Entonces un <catalog> con dos <book> Los niños producen { "catalog": { "book": [ {...}, {...} ] } } - una matriz. Pero a <catalog> con un ternso <book> produce { "catalog": { "book": {...} } } - un objeto simple, sin matriz.
La consecuencia de planificar: Una lista de un elemento no parece una lista. Si su código descendente espera catalog.book Para ser siempre una matriz e itera sobre ella, una respuesta de un solo libro lo romperá, porque book será un objeto en ese momento particular. Esto es ' No hay error en la conversión - it' es una consecuencia inevitable de que XML no marque listas - pero es ' es un verdadero problema en las integraciones donde el recuento de artículos varía. Mi desastre con el transportista de envío fue exactamente este: los pedidos de un paquete devolvieron un objeto donde los pedidos de paquetes múltiples devolvieron una matriz, y mi código asumió la matriz.
El patrón defensivo en su código de consumo es normalizar: si un campo puede ser cualquiera, coaccione a una matriz antes de iterar ([].concat(catalog.book)). deliberado porque La forma varía es lo que te permite escribir ese guardia en lugar de quemarte con él.
¿Cómo se manejan los atributos y los espacios de nombres?
Los atributos se convierten en claves de objeto con un @ prefijo <user role="admin" active="true"> se convierte en { "user": { "@role": "admin", "@active": "true" } }. El prefijo mantiene los atributos visualmente distintos de los elementos secundarios y evita una colisión en la que un atributo y un elemento secundario comparten un nombre. Si no lo hace ' No necesitas atributos en absoluto, solo quieres los datos del elemento, el convertidor Tiene una opción "ignorar atributos" que los suelta por completo para obtener un resultado más limpio.
Los espacios de nombres aparecen como parte del nombre de la etiqueta. <soap:Body> se convierte en una clave literalmente llamada "soap:Body"y xmlns:soap="..." es un atributo como cualquier otro, aterrizando bajo @xmlns:soap. Esta es la elección pragmática: resolver completamente los espacios de nombres en sus URI produciría claves difíciles de manejar y rara vez coincide con lo que realmente quiere el código de integración, que es abordar soap:Body por su nombre prefijo familiar. Si está procesando SOAP o SVG o cualquier vocabulario con espacio de nombre, los prefijos que conoce del XML son las claves que obtiene en el JSON.
Secciones CDATA - el <![CDATA[ ... ]]> los bloques que permiten que XML transporte texto sin formato con caracteres especiales se leen palabra por palabra, sin decodificación de entidades, que es exactamente su propósito. A <script> investigaciones operacionales <description> Envuelto en CDATA para proteger sus ampersands y los corchetes angulares se realizan con esos caracteres intactos. CDATA externo, entidades estándar (<, &, y amigos) y referencias numéricas (é, é) se decodifican a sus caracteres reales.
¿Cómo se convierte XML a JSON con la herramienta?
Paso 1: Pega tu XML
Cualquier XML bien formado funciona, con o sin <?xml ?> Declaración, con o sin espacios de nombres. La declaración, el tipo de documento, los comentarios y las instrucciones de procesamiento se reconocen y omiten, por lo que puede pegar un documento completo directamente desde una respuesta de API o un archivo. El botón Cargar ejemplo le brinda un catálogo con atributos, elementos anidados y una etiqueta repetida, para que pueda ver cada comportamiento de conversión a la vez.
Paso 2: Elige tus opciones
Elija una sangría de 2 o 4 espacios para el JSON. Decida si incluir atributos o dejarlos. Y elija si desea analizar tipos: déjelo y cada valor permanece como una cadena (seguro, sin pérdidas); enciéndalo y los números inequívocos y los booleanos se convierten en números JSON reales y booleanos. OFF es el valor predeterminado correcto cuando los valores como los códigos postales o las ID pueden tener ceros iniciales que debe conservar.
Paso 3: Convertir y Revisar
El convertidor analiza primero e informa el marcado con formato incorrecto (una etiqueta de cierre no coincidente, un elemento no cerrado, un bloque CDATA no terminado) con un mensaje específico en lugar de producir JSON basura. En caso de éxito, el JSON aparece con recuentos de líneas y bytes. Deslícelo para confirmar que las decisiones de matriz contra objeto coinciden con sus expectativas.
Paso 4: Copiar o descargar
Copie el JSON en su portapapeles para pegarlo en código, o descárguelo como .json archivo Desde aquí se coloca en un cuerpo de solicitud, un almacén de datos o la siguiente etapa de su canalización. Si el siguiente paso es un formato de configuración, el Convertidor JSON a YAML lo lleva más lejos.
¿Cuáles son los flujos de trabajo comunes para esta conversión?
Integración de API SOAP
SOAP todavía está en todas partes en los sistemas empresariales, bancarios, logísticos y gubernamentales, y habla XML exclusivamente. Cuando un servicio moderno de JavaScript o nodo necesita consumir una respuesta SOAP, convertir el envolvente XML a JSON es el paso uno. Los medios de conversión que preservan el espacio de nombres soap:Body y soap:Envelope Mantenga sus nombres familiares y el manejo de atributos mantiene los metadatos que a SOAP le encanta colgar elementos. Esta es la misma categoría de trabajos de pegamento cubiertos en el Guía de depuración de API.
Lectura de fuentes RSS y Atom
Las fuentes RSS y Atom son XML, y llevarlos a una aplicación JavaScript significa convertirlos. un feed'S <item> los elementos son el caso de etiquetas repetidas del libro de texto: se convierten en una matriz JSON de elementos, exactamente lo que desea .map() para renderizar una lista. Atributos como un recinto url y type se conservan bajo sus claves prefijadas, por lo que los podcasts y las fuentes de medios mantienen sus enlaces de audio intactos.
Migración de archivos de configuración y datos
Las aplicaciones más antiguas almacenan configuración y datos en XML, piense .config Archivos, mapas de sitio, conjuntos de datos exportados, fragmentos XML abiertos de Office. Convertirlos a JSON es el primer paso al modernizar un sistema o importar datos heredados a una tienda nativa de JSON. La opción de análisis de tipo es útil aquí cuando constar Los campos numéricos son genuinamente numéricos y quieren que se escriban en el destino.
Pruebas y prototipos
Cuando usted're cableado de un flujo de datos y solo necesita ver la forma de una carga útil XML como JSON - para diseñar una interfaz TypeScript, para burlarse de una respuesta, para verificar una ruta de campo - una conversión rápida en el navegador supera la escritura de código de analizador desechable. Convierte, lee la estructura, escribe tus tipos en su contra.
XML vs JSON: ¿Cuándo encaja cada formato?
| xml | JISON | |
|---|---|---|
| Era primaria y ecosistema | empresa, jabón, documentos | API web, JavaScript, Config |
| atributos | de clase mejor | Ninguno: asignado a claves con prefijo |
| arreglo | Ninguno: las etiquetas repetidas implican listas | de clase mejor |
| tipos | todo texto | Cadenas, números, booleanos, nulo |
| comentarios | sostenido | no en la especificación |
| Espacios de nombres | de clase mejor | Ninguno: se mantiene como nombres clave con prefijo |
| verbosidad | Superior: etiquetas de cierre, atributos | Inferior - tirantes y soportes |
| Hábitat natural | SOAP, RSS/ATOM, formatos de oficina, configuración | API REST, datos de front-end, package.json |
El patrón detrás de la tabla: XML se creó para documentos e intercambio empresarial donde la estructura, la validación y la autodescripción importan; JSON se creó para la web, donde la ligereza y un mapa directo a los objetos JavaScript importan. La dirección de conversión es abrumadoramente de XML a JSON porque el movimiento en la industria va desde sistemas más antiguos basados en XML hacia interfaces y servicios nativos de JSON - usted & # 39; Estamos reuniendo datos heredados donde viven y llevándolos a una canalización moderna. El conjunto más amplio de herramientas de formato para esa canalización se encuentra en el Guía de herramientas de codificación.
¿Es seguro convertir XML que contenga datos confidenciales?
Las cargas útiles de integración son densas con cosas que no desea filtrar: respuestas SOAP que llevan registros de clientes, archivos de configuración con puntos finales y credenciales internos, exportación de datos con información personal. Y estos son exactamente lo que se pega en convertidores en línea, generalmente de integración intermedia, generalmente con prisa.
los Convertidor de Toolz.dev analiza y convierte completamente en su navegador con un analizador sin dependencias - no DOMParser, sin llamada al servidor, sin datos que salgan de la página. Desconecte su red después de que se cargue la página y aún funciona. Ese es un hecho arquitectónico sobre cómo se construye la herramienta, no una promesa en un documento de política, y es el principio del navegador detrás de toda la caja de herramientas, detallada en el Guía de privacidad de datos.
Se aplica la advertencia estándar: la conversión del lado del cliente protege el paso de conversión. Lo que haga con el JSON después, dónde lo pegará y a qué lo enviará, es una decisión separada. Pero la transformación en sí mantiene su XML en su máquina.
preguntasrán el
¿Cómo convierto XML a JSON en línea?
Pegue su XML en XML to JSON Converter y haga clic en Convertir. La herramienta analiza el XML, lo convierte a JSON con la sangría y las opciones elegidas y le permite copiar o descargar el resultado. El procesamiento es 100% en el navegador; no se carga nada.
¿Cómo se representan los atributos XML en la salida JSON?
Los atributos se convierten en claves de objeto con prefijo @, por lo que un elemento de libro con id="bk101" se convierte en una tecla "@id". Esto mantiene los atributos distintos de los elementos secundarios. Puede desactivar la salida de atributos por completo con la opción Ignorar atributos si solo necesita los datos del elemento.
¿Por qué algunos elementos XML se convierten en matrices y otros en objetos?
JSON no tiene forma de marcar que un elemento podría repetir, por lo que el convertidor usa su aparición: si una etiqueta aparece más de una vez bajo el mismo padre, se convierte en una matriz, y si aparece una vez que permanece en un solo objeto. Esto refleja la fuente fielmente, aunque significa que una lista con un elemento parece un solo objeto en lugar de una matriz.
¿El convertidor maneja secciones de CDATA y entidades XML?
Sí. Los bloques CData se leen textualmente sin decodificación de entidades, que es su propósito. Fuera de CDATA, las entidades estándar como <, >, &, " y ' y las referencias de caracteres numéricos como é y é se decodifican en sus caracteres reales.
¿Puedo convertir una respuesta SOAP o una fuente RSS a JSON?
Sí. Los sobres SOAP y los feeds RSS o Atom son XML ordinarios, por lo que se convierten como cualquier otro documento. Las etiquetas espaciadas por nombres mantienen su prefijo en el nombre clave: jabón:El cuerpo se convierte en "jabón:Cuerpo" clave - y elementos repetidos como elementos RSS se convierten en una matriz JSON sobre la que puede asignar.
¿Se quedarán los números y los booleanos como texto después de la conversión?
Por defecto sí, porque XML no tiene un sistema de tipo y valores como "007" o "1.10" pueden ser significativos como texto. Habilite la opción de análisis de tipo para convertir texto numérico y booleano inequívoco en números JSON reales y booleanos cuando eso sea lo que desea.
¿Es seguro convertir XML que contenga datos confidenciales?
Sí. El analizador se ejecuta completamente en JavaScript en su navegador: ninguna solicitud de red transporta sus datos, nada se registra ni almacena y la herramienta funciona sin conexión. XML con registros de clientes, identificadores internos o secretos de integración nunca sale de su máquina.
¿Cuál es la diferencia entre XML y JSON?
XML es un lenguaje de marcado con etiquetas, atributos, espacios de nombres y comentarios de apertura y cierre, diseñado para documentos e intercambio de datos empresariales. JSON es un formato más ligero creado a partir de objetos, matrices y valores primitivos, y es el predeterminado para las API web modernas. La conversión de XML a JSON es común cuando se integran sistemas SOAP o de alimentación más antiguos con front-ends de JavaScript.
XML y JSON parecen intercambiables y son 't, porque JSON no tiene atributos, ni matrices por repetición ni texto junto a hijos: la conversión exacta coloca una conversión ingenua y pierde datos silenciosamente. Un convertidor que maneja esos casos a propósito le brinda JSON que ' es fiel a la fuente: Pega tu XML, verifique cómo mapeó los atributos y las etiquetas repetidas, y traiga datos limpios a su canalización en lugar de una corrupción de aspecto plausible.



