Saltar al contenido principal

Convertir JSON a XML

JSON a XML convierte un documento en tu navegador. Los miembros cuyo nombre empieza por el prefijo de atributo se convierten en atributos XML, un array repite el nombre de su miembro en lugar de ganar un elemento contenedor, y una clave JSON que no es un nombre XML legal se reescribe conservando la original en un atributo name, en vez de destrozarla en silencio.

Solo local
Sangría
JSON
0 B1 líneaLín. 1, Col. 1
XMLsolo lectura
0 B1 línea

¿Cómo funciona Convertir JSON a XML?

La dirección difícil suele ser XML a JSON, porque XML tiene más estructura. Ir al revés implica menos decisiones, pero tres de ellas son estructurales, y equivocarse en cualquiera produce una salida que no es XML bien formado en absoluto.

Las claves JSON no son nombres XML

Una clave JSON puede ser cualquier cosa: 2024 total, user.name, "", un emoji. Un nombre de elemento XML no puede empezar por un dígito, no puede contener un espacio y no puede estar vacío. La respuesta habitual es sustituirlos por guiones bajos, lo que destruye la clave en silencio. Aquí el nombre se repara de la misma manera, y la original se escribe en un atributo name — así el documento está bien formado y no se pierde nada. El número de claves reparadas se informa en lugar de quedar enterrado.

Una raíz array produciría dos elementos raíz

Un documento XML tiene exactamente un elemento raíz; no es una regla de estilo, es lo que hace de un documento un documento. Escribir los elementos de un array JSON de nivel superior en el nivel superior produce tantas raíces como elementos haya, y cualquier parser XML lo rechaza. Así que una raíz array se envuelve, y sus elementos toman el nombre de item.

Un array que es un miembro es distinto: repite el nombre de elemento del propio miembro, porque así es como XML expresa una lista. No hay elemento contenedor a menos que el JSON lo tuviera, que es lo que hace que la salida vuelva por el conversor XML a JSON con el mismo elemento en una lista force-array.

El escape no es opcional

&, < y > en el texto, más " y saltos de línea literales en los valores de atributo, todo tiene que ir escapado o la salida está mal formada. El salto de línea dentro de un atributo es el que la gente pasa por alto: los parsers XML lo normalizan a un espacio a menos que se escriba como &#10;, así que el valor cambia en silencio a la vuelta.

XML es más grande, y ese es el trato

Cada nombre de elemento se escribe dos veces. La diferencia de tamaño se muestra en la tira de estadísticas para que el coste sea visible. Lo que compras a cambio son atributos, espacios de nombres, comentarios, instrucciones de procesamiento y validación contra esquemas — nada de eso existe en JSON, y cualquiera de esas cosas puede ser la razón por la que estás convirtiendo.

JSON

{
  "@id": "1",
  "line": ["a", "b"],
  "note": null
}

XML

<?xml version="1.0" encoding="UTF-8"?>
<root id="1">
  <line>a</line>
  <line>b</line>
  <note/>
</root>

¿Qué opciones y casos límite admite Convertir JSON a XML?

Referencia técnica y opciones
ParámetroTipoValor predeterminadoComportamiento y casos límite
Nombre de la raíznombre de elementorootEl elemento envolvente único. Obligatorio, porque un documento XML tiene exactamente un elemento raíz y el nivel superior de JSON no proporciona un nombre.
Prefijo de atributosstring@Los miembros que empiezan con este prefijo se convierten en atributos. Coincide con el valor por defecto del conversor XML a JSON, para que un documento sobreviva a un viaje de ida y vuelta a través de ambos.
Clave de textostring#textEl miembro que se escribe como contenido del elemento en lugar de como elemento hijo. Así es como un elemento tiene tanto atributos como texto.
Nombre del elementonombre de elementoitemNombre del elemento para los elementos de un array de nivel superior, que no tiene un nombre de miembro del que tomar prestado. Los arrays que son miembros repiten el nombre del miembro en su lugar.
Sangríaespacios2Cero emite una sola línea, que es lo que quieres en la red — el espacio en blanco entre elementos es significativo para un analizador estricto y el formateo cambia el documento.
DeclaraciónbooleanoonEmite <?xml version="1.0" encoding="UTF-8"?>. Desactívalo cuando la salida es un fragmento que se incrusta en un documento más grande.
Auto-cerrar vacíosbooleanoonnull y objetos vacíos se convierten en <a/> en lugar de <a></a>. Los dos son idénticos para cualquier analizador XML; algunas herramientas posteriores son más exigentes que la especificación.
Clave no válidareparadase conserva la originalUna clave que no puede ser un nombre de elemento se reescribe y la original se escribe en un atributo de nombre. El número reparado se informa encima de la salida.
Escapeautomático—& < > en texto; & < > " y saltos de línea en valores de atributo. Un salto de línea sin escape en un atributo es normalizado a un espacio por el lector, lo que cambia el valor.

Preguntas frecuentes

¿Cómo consigo atributos en lugar de elementos hijo?

Antepón @ al nombre del miembro — {"@id": "1"} se convierte en id="1" en el elemento. El prefijo es configurable, y es el mismo que usa por defecto el conversor XML a JSON, así que un documento puede ir XML → JSON → XML y volver con la misma forma.

¿Por qué se renombró mi clave?

Porque no es un nombre de elemento XML legal: empezaba por un dígito, contenía un espacio o un carácter que XML no permite, o estaba vacía. El nombre del elemento se repara y la clave original se escribe en un atributo name, así que no se pierde nada y el documento está bien formado. El número se muestra sobre la salida para que sepas que ocurrió.

¿Por qué no hay un elemento contenedor alrededor de mi array?

Porque XML expresa una lista repitiendo el elemento, no envolviéndolo. {"line": ["a","b"]} se convierte en dos elementos <line>, que es XML idiomático y lo que hace bien la ida y vuelta. Si quieres <lines><line>…</line></lines>, pon ese anidamiento en el JSON: {"lines": {"line": ["a","b"]}}.

¿Debería indentar la salida?

No, para nada que vaya por la red. El espacio en blanco entre elementos es significativo en XML — un parser estricto ve tu indentación como nodos de texto, y con contenido mixto realmente cambia el documento. Indenta para leer, pon indent a cero para enviar. Esta es una diferencia real respecto a JSON, donde el espacio en blanco nunca importa.

¿Puede producir un documento que valide contra mi XSD?

Solo por casualidad. Un esquema restringe el orden de los elementos, la cardinalidad, los tipos de datos y los espacios de nombres, y nada de esa información existe en JSON — los miembros de un objeto no tienen un orden con significado, así que el conversor no puede saber qué secuencia exige tu esquema. Usa esto para obtener la forma, y luego reordena y añade los espacios de nombres para ajustarte al esquema.

¿Se sube mi JSON?

No. El análisis y la conversión se ejecutan en la pestaña que ya tienes abierta, algo que puedes confirmar en el panel Network. El motivo habitual para convertir JSON a XML es alimentar un sistema empresarial antiguo, y los payloads implicados rara vez son de los que querrías viendo pasar por un servidor desconocido.