← Todos os artigos

JSON para XML: elementos raiz, arrays e mapeamento de atributos

Converta JSON para XML: escolher um elemento raiz, mapear chaves com prefixo @ para atributos, transformar arrays em elementos repetidos e escapar — em JS, Python e online.

Converter JSON em XML é a operação inversa de um mapeamento com perdas, o que significa que você terá de tomar decisões que o JSON nunca exigiu: qual é o elemento raiz? Esta chave vira atributo ou elemento filho? Como um array JSON vira tags XML repetidas? Este guia cobre as convenções para JSON → XML —— elementos raiz, arrays, atributos e escape —— em JavaScript, Python e no navegador.

Escolher um elemento raiz

XML exige exatamente um elemento raiz; JSON não tem essa regra. A primeira decisão é o que envolve todo o resto. Se seu JSON é um objeto com uma única chave de nível superior, essa chave é a raiz natural:

{ "note": { "to": "Ada", "from": "Bob" } }

<note>
  <to>Ada</to>
  <from>Bob</from>
</note>

Se o JSON tem várias chaves de nível superior (ou é um array), não há raiz única, então os conversores envolvem tudo com um elemento sintético como <root>:

{ "to": "Ada", "from": "Bob" }

<root>
  <to>Ada</to>
  <from>Bob</from>
</root>

Atributos a partir de chaves com prefixo @

Para fazer ida e volta com a convenção XML para JSON, chaves que começam com @ são emitidas como atributos em vez de elementos filhos, e a chave #text vira o conteúdo textual do elemento:

{
  "price": { "@currency": "USD", "#text": "9.99" }
}

<price currency="USD">9.99</price>

Se você não usar essa convenção, cada valor vira um elemento filho —— válido, só mais verboso. A convenção @/#text é o que torna XML → JSON → XML sem perdas.

Arrays viram elementos repetidos

Um array JSON não vira um único elemento com vários valores —— vira o mesmo elemento repetido, porque é assim que o XML representa uma lista:

{ "tags": { "tag": ["a", "b", "c"] } }

<tags>
  <tag>a</tag>
  <tag>b</tag>
  <tag>c</tag>
</tags>

Uma consequência sutil: um array de objetos de nível superior não pode ser a raiz (produziria vários elementos raiz), então precisa ser envolvido —— normalmente como <root> contendo <item> repetidos.

Valores sem mapeamento limpo

  • Booleanos e números —— XML não tem tipos, então true e 42 são escritos como o texto true e 42.
  • null —— normalmente um elemento vazio/autoencerrado: <middleName/>.
  • Chaves que não são nomes de elemento válidos —— nomes não podem começar com dígito nem conter espaços. "1st place" não é tag legal e precisa ser sanitizada, ou o XML produzido será inválido.

Escape e declaração

Valores de texto e atributo precisam escapar &, < e > (mais " dentro de atributos). Um conversor também deve prefixar a declaração XML para que a saída seja um documento completo:

<?xml version="1.0" encoding="UTF-8"?>
<message>B &amp; C are &lt; D</message>

Mirar em um XSD ou produzir xmlns

Se seu consumidor valida o XML contra um XSD (XML Schema), a conversão precisa fazer algo além do mapeamento chave→elemento:

  • A ordem dos elementos importa. Atributos XML de um elemento são desordenados (pela spec), mas elementos filhos são ordenados, e a maioria dos XSDs impõe isso com xsd:sequence. Emita filhos na ordem que o schema espera, não na ordem de iteração das chaves do objeto, ou a validação falhará.
  • Mapeamento de namespaces. Recrie as declarações xmlns como atributos @xmlns na raiz e reflita nomes com prefixo de volta no XML ("soap:Envelope"<soap:Envelope>). Um conversor que descarte namespaces produzirá XML que não valida contra nenhum XSD que os exija.
  • Valores cientes do tipo. XML não tem tipos nativos, então um XSD com xsd:int ou xsd:date apenas verifica que o conteúdo textual se encaixa. Formate o valor JSON como texto no padrão que o XSD espera (data ISO, inteiro como string etc.).

Como converter JSON em XML no código

// JavaScript —— um pequeno construtor recursivo ou uma biblioteca:
import { XMLBuilder } from 'fast-xml-parser';
const builder = new XMLBuilder({ ignoreAttributes: false, attributeNamePrefix: '@' });
const xml = builder.build(jsonObject);

# Python —— dicttoxml, ou construir com xml.etree.ElementTree
from dicttoxml import dicttoxml
xml_bytes = dicttoxml({"note": {"to": "Ada"}}, attr_type=False)

Converter JSON em XML online

Cole seu JSON no conversor JSON ⇄ XML e clique em To XML. Ele escolhe uma raiz sensata, mapeia chaves @ para atributos, repete elementos para arrays e escapa caracteres especiais —— tudo no navegador. Se seu JSON tem erros de sintaxe, ele é reparado antes; você também pode limpá-lo com JSON Fix.

Perguntas frequentes

Como converto JSON em XML?

Escolha um elemento raiz (uma única chave de nível superior ou um <root> sintético) e converta recursivamente chaves em elementos filhos, chaves com prefixo @ em atributos e arrays em elementos repetidos —— escapando &, < e > no texto.

Como um array JSON é convertido em XML?

Cada item do array vira um elemento separado com o mesmo nome de tag, porque o XML representa listas como elementos repetidos em vez de um único nó multivalor.

Como faço um valor JSON virar atributo XML?

Prefixe a chave com @ (ex.: "@id") e coloque o texto do elemento sob #text. Isso bate com a convenção padrão XML para JSON, então a conversão é reversível.

E se uma chave JSON não for um nome de elemento XML válido?

Nomes de tag XML não podem começar com dígito nem conter espaços, então chaves como "1st place" precisam ser sanitizadas (ex.: para _1st_place), senão a saída não será XML bem-formado.

Ferramentas e guias relacionados