YamlBox

Convertidores de datos · 6 minutos de lectura

XML a JSON: las decisiones que todo convertidor debe tomar

XML y JSON son árboles, por lo que la conversión entre ellos debería ser trivial; sin embargo, cada conversión de XML a JSON que has visto ha producido un resultado de apariencia diferente. Esto se debe a que XML lleva información y JSON no tiene lugar para: atributos, texto y elementos mixtos, espacios de nombres y documentos donde la misma etiqueta aparece una o mil veces. Un buen conversor toma esas decisiones explícitamente en lugar de ocultarlas.

Actualizado

La ambigüedad que ningún conversor puede evitar

Considere `<items><item>x</item></items>`. ¿Debería `item` ser una cadena o una lista de uno? XML no lo dice, y la diferencia importa en el momento en que escribes código en su contra: un consumidor que espera siempre una matriz se rompe en una respuesta de un solo elemento, y un consumidor que espera que un objeto se rompa cuando llega un segundo elemento. Los convertidores maduros le permiten forzar matrices para elementos de lista conocidos en lugar de adivinar silenciosamente, porque la suposición es correcta con la frecuencia suficiente para alcanzar la producción.

Los atributos necesitan una convención de nomenclatura

JSON no tiene atributos, por lo que un atributo debe convertirse en una clave hermana o en un objeto anidado. La convención ampliamente utilizada antepone los nombres de atributos con `@` - `<image src="a.png"/>` se convierte en `{"@src": "a.png"}`, mientras que el texto del elemento va a una clave reservada como `#text` cuando un elemento tiene atributos y contenido. Cualquiera que sea la convención que utilice el conversor, debe aplicarse de forma coherente, porque el XML medio convertido es peor que el XML no convertido.

                <rss version="2.0"><channel><title>Feed</title></channel></rss>
→ {
  "rss": {
    "@version": "2.0",
    "channel": { "title": "Feed" }
  }
}
              

Espacios de nombres

Los documentos con espacios de nombres (servicios SOAP, mapas de sitio, formatos de Office) califican los nombres de los elementos como `ns:element`. JSON no tiene equivalente, por lo que un convertidor elimina el prefijo, lo mantiene como parte de la clave o reorganiza el documento alrededor del URI del espacio de nombres. Eliminarlo es común y en ocasiones desastroso cuando dos espacios de nombres usan el mismo nombre local. Si su documento utiliza espacios de nombres, verifique la salida para detectar colisiones antes de confiar en ella y prefiera mantener el prefijo en la clave.

Dónde se utiliza realmente esta conversión

  • Feeds RSS y Atom: leer un feed en JavaScript es mucho más fácil después de la conversión.
  • SOAP y API heredadas: convertir una respuesta en algo que un cliente moderno pueda consumir.
  • Mapas de sitio y archivos de configuración: inspeccionar la estructura sin un editor que comprenda los esquemas.
  • Migraciones de datos: mover registros de un sistema de la era XML a uno basado en JSON.

Round-trip fidelity is a myth. La conversión de XML a JSON y viceversa rara vez devuelve el documento original byte por byte, porque el orden de declaración, los espacios en blanco, los comentarios y CDATA no sobreviven. Convierta cuando necesite consumir los datos en otro lugar, no como estrategia de respaldo.

Validar primero, luego convertir

Los analizadores XML son estrictos con las etiquetas no cerradas y las entidades no válidas, y los mensajes de error suelen ser precisos. Corrija el documento antes de convertirlo: una entrada bien formada es la única manera de obtener una estructura JSON que valga la pena conservar. Luego, la conversión se ejecuta localmente en el navegador, lo cual es importante cuando XML es una exportación de un cliente o una respuesta de servicio interno, y continúa funcionando sin conexión.

XML a JSON — preguntas frecuentes

¿Por qué XML a JSON producen resultados con formas diferentes en diferentes herramientas?

XML lleva atributos, espacios de nombres y elementos repetidos que JSON no puede expresar directamente, por lo que cada herramienta elige convenciones: `@` para atributos, `#text` para contenido, matrices para listas conocidas. Las herramientas consistentes importan más que la convención que elija.

¿Cómo se representan los elementos XML repetidos en JSON?

Como una matriz, generalmente incondicionalmente para elementos vistos más de una vez. Las apariciones únicas pueden seguir siendo objetos a menos que fuerce matrices para ese elemento, que es la opción más segura para cualquier cosa que pueda repetirse.

¿Puedo convertir una respuesta SOAP a JSON?

Sí, aunque incluirá espacios de nombres y una estructura de sobre que la mayoría de los códigos de consumo no desean. Convierta y luego ajuste el resultado a la carga útil que realmente necesita en lugar de pasar el sobre a través de su aplicación.

Herramientas mencionadas en esta publicación.

Explore la lista completa de 19 herramientas

Más artículos para leer

Todas las 19 publicaciones →