Conversor JSON ⇄ XML
Cole um JSON para gerar o XML, ou um XML para gerar o JSON. A ferramenta segue uma convenção simples para atributos e listas, avisa o que se perde na conversão e recusa XML perigoso.
Entrada
Tudo é convertido no seu navegador. Nada é enviado a servidor.
Resultado
A convenção usada
JSON e XML não têm a mesma estrutura: o XML tem atributos, texto misturado com elementos e ordem entre irmãos. Para converter, a ferramenta usa uma convenção comum:
| No XML | No JSON |
|---|---|
Elemento com só texto: <nome>Ana</nome> | Texto: "nome": "Ana" |
Atributo: <item id="7"> | Chave com arroba: "@id": "7" |
| Texto junto com atributos ou filhos | Chave "#text" |
| Elementos repetidos com o mesmo nome | Lista: "item": ["a", "b"] |
Elemento vazio: <obs/> | Texto vazio: "obs": "" |
Exemplo
Este JSON:
{"pedido": {"@id": "7", "cliente": "Ana & Cia", "item": ["caneta", "lápis"]}}
vira este XML:
<?xml version="1.0" encoding="UTF-8"?> <pedido id="7"> <cliente>Ana & Cia</cliente> <item>caneta</item> <item>lápis</item> </pedido>
Os caracteres especiais (&, <, >) são escapados na ida e restaurados na volta.
O que se perde na conversão
- Tipos: o XML só tem texto. Ao voltar para JSON, números e true/false ficam como texto, a menos que você marque "Converter números e true/false". Mesmo assim, só valores em forma canônica são convertidos (
"007"continua texto, porque virar 7 perderia o zero). - Nulo:
nullvira elemento vazio, e o elemento vazio volta como texto vazio. O XML não distingue os dois. - Lista com um item:
["a"]vira um elemento só, e volta como texto, sem lista. O XML não diz se haveria mais itens. - Ordem do texto misturado: em
<p>Olá <b>mundo</b> tudo</p>, o texto vai para#texte a posição entre os elementos se perde. A ferramenta avisa quando isso acontece. - Espaços nas pontas: o texto de cada elemento é aparado.
- Comentários e instruções: são descartados. CDATA vira texto comum.
Chaves que não são nomes de elemento válidos
Um nome de elemento XML não pode começar com número nem ter espaço. Se o JSON tiver uma chave assim, como "1o lugar", a ferramenta a troca por um nome válido (_1o_lugar) e avisa. Nomes que começam com "xml" também são reservados e recebem um sublinhado.
Segurança
- Uma declaração
<!DOCTYPE>com<!ENTITY>é recusada. É o recurso usado em ataques de expansão de entidades (XXE e "billion laughs"), e a ferramenta não os executa. - Só as cinco entidades padrão (
& < > " ') e as referências numéricas são aceitas. - Há limite de 5 milhões de caracteres e de 200 níveis de aninhamento.
- Nada sai do navegador.
Quando usar
Esta conversão ajuda a ler no JSON um XML vindo de um sistema legado, de uma nota fiscal ou de uma resposta SOAP, e a montar um XML a partir de dados que você já tem em JSON. Ela não valida o XML contra um esquema (XSD) e não preserva o espaço em branco nem a ordem de elementos de tipos diferentes.
Perguntas frequentes
Por que os atributos viram chaves com arroba?
Para a conversão ser reversível: o arroba marca que a chave é um atributo, e não um elemento filho.
O XML com namespace funciona?
Funciona: o prefixo faz parte do nome (soap:Envelope) e as declarações xmlns viram atributos. A ferramenta não resolve nem valida namespaces.
Posso converter um XML grande?
Até 5 milhões de caracteres. Acima disso, a ferramenta recusa, para não travar o navegador.
O resultado é igual ao de outras ferramentas?
Pode diferir. Não existe uma conversão única entre JSON e XML. Esta usa a convenção descrita acima, e o mais importante é usar a mesma nos dois sentidos.