XML a JSON
Los documentos XML guardan información en lugares que JSON nunca fue diseñado para tener: atributos, espacios de nombres, nodos de texto mixtos. Un convertidor ingenuo descarta todo eso; este endpoint lo conserva, mapeando los atributos en una estructura predecible y documentada en lugar de eliminarlos en silencio.
Ejecutar — gratis
Corre en su navegador. Gratis y sin límite: sus datos no salen de esta página.
Lo que cualquier script rápido hace mal
Pídale a un desarrollador que escriba en cinco minutos un convertidor de XML a JSON y va a obtener uno que maneja bien el texto de los elementos y luego descarta silenciosamente cada atributo, porque la mayoría de los analizadores de XML tratan los atributos como metadatos y no como datos. Pero en documentos reales —sobres SOAP, feeds RSS, marcado SVG, archivos de configuración heredados de un sistema de hace una década— los atributos suelen cargar los campos que realmente importan: un id, un tipo, un código de moneda, un número de versión que vive en la etiqueta y no adentro de ella. data.xml_to_json conserva esos atributos, con un prefijo consistente para que nunca choquen con nombres de elementos vecinos.
Qué envía y qué recibe de vuelta
Envíe su XML por POST a /data/xml-to-json, reciba un task_id de inmediato y deje que la conversión corra en segundo plano. El resultado —JSON limpio con atributos, elementos anidados y etiquetas repetidas mapeadas en arreglos— llega mediante una llamada de webhook firmada o queda disponible en un enlace firmado válido por 24 horas, según cómo esté configurado su sistema para recibirlo.
Por qué XML sigue apareciendo en 2026
JSON ganó hace años la guerra de los payloads de API, pero XML nunca desapareció: todavía sostiene servicios SOAP, feeds RSS y Atom, los archivos internos de documentos de oficina, gráficos SVG, recursos de Android y una larga lista de sistemas empresariales donde un formato autodescriptivo y validable por esquema era la decisión correcta cuando se construyó. Los equipos que arman integraciones modernas no eligen el formato del otro lado de un feed heredado; eligen qué tan rápido lo normalizan apenas llega, y esa es exactamente la tarea de este endpoint.
Cómo encaja en un flujo de normalización
Un patrón común es una capa de ingreso que acepta lo que sea que envíe un socio o sistema heredado, lo convierte a JSON de inmediato y deja que cada servicio posterior —validación, almacenamiento, transformación— trabaje sobre una única estructura predecible en lugar de escribir un analizador XML a la medida de cada fuente. Como la tarea es asíncrona y se cobra por solicitud, procesar de noche varios miles de feeds de socios cuesta lo mismo por documento sin importar si corre a las 3am sin supervisión o un archivo a la vez en horario laboral, y no se cobra nada a menos que la conversión realmente tenga éxito.
Qué puede hacer con ella
Normalización de respuestas SOAP
Una capa de integración convierte respuestas SOAP en XML de una API heredada de un socio a JSON antes de entregárselas a un microservicio moderno que solo habla JSON.
Ingreso de feeds RSS y Atom
Un agregador de contenido convierte feeds RSS y Atom en XML a JSON para almacenarlos y consultarlos junto con datos que ya llegan desde APIs JSON.
Migración de configuraciones heredadas
Una plataforma que migra un sistema de configuración basado en XML convierte cada archivo a JSON una sola vez, conservando todos los atributos que necesita el nuevo formato.
Extracción de metadatos de SVG
Una herramienta de diseño convierte archivos SVG a JSON para leer atributos como viewBox, id y style de forma programática sin escribir un analizador XML propio.
Preguntas frecuentes
¿Cómo convierto XML a JSON con la API?
Envíe su documento XML por POST a /data/xml-to-json, guarde el task_id devuelto y reciba el JSON convertido por webhook o mediante un enlace firmado válido por 24 horas.
¿Es gratis la API para convertir XML a JSON?
No, no hay plan gratuito ni prueba; cuesta $0.002 por solicitud, y una conversión fallida nunca se cobra.
¿Se conservan los atributos de XML en el JSON resultante?
Sí, los atributos se conservan con un prefijo consistente en el JSON resultante para que nunca choquen con nombres de elementos de la misma etiqueta.
¿Qué pasa con los espacios de nombres de XML?
Los prefijos de espacio de nombres se mantienen en los nombres de elementos y atributos a los que pertenecen, para que el código posterior siga sabiendo de qué espacio de nombres viene cada campo.
¿Puede manejar etiquetas repetidas y elementos anidados?
Sí, las etiquetas hermanas repetidas se mapean en arreglos de JSON y los elementos anidados se convierten en objetos anidados, respetando la estructura original del documento.
¿Qué tan grande puede ser el archivo que convierto?
El endpoint está pensado para tamaños típicos de documento, feed o archivo de configuración; las exportaciones muy grandes conviene dividirlas en varias solicitudes enviadas en paralelo.
¿Puedo convertir archivos por lote?
Sí, envíe una tarea asíncrona por documento y reciba cada resultado por webhook a medida que termine, el mismo patrón que usan la mayoría de las integraciones por lotes.
¿Se guardan mis datos XML después de la conversión?
No, los archivos de origen y los resultados se eliminan después del período de retención y nunca se usan para entrenamiento.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/data/xml-to-json \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"input":"…"}'const res = await fetch("https://api.kit.forhosting.com/data/xml-to-json", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"input": "…"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/data/xml-to-json",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"input": "…"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/data/xml-to-json", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"input":"…"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"input":"…"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/data/xml-to-json", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"input": "…"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "data.xml_to_json",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_mb | 25 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |