XML ⇄ JSON
Cole qualquer um dos formatos — o outro aparece enquanto você digita, nos dois sentidos.
Como usar
- Cole XML ou JSON na caixa — o resultado é desenhado enquanto você digita, sem botão para pressionar. A direção é detectada a partir do primeiro caractere (< para XML, [ ou { para JSON) e mostrada acima do resultado, para você conferir.
- Se a direção for detectada errado, escolha XML → JSON ou JSON → XML. As opções abaixo mudam com a direção: XML → JSON mostra “Detectar números e booleanos”, e JSON → XML mostra o “Nome da raiz” para envolver arrays.
- Copie ou baixe o resultado. Os dois usam exatamente o texto que aparece na tela; o arquivo se chama data.json ou data.xml. “Carregar exemplo” preenche um exemplo para a direção ativa.
Exemplo
Entrada (XML)
<recado id="1"><para>Ana</para><de>Bruno</de><corpo>Oi!</corpo></recado>
Saída (JSON)
{ "recado": { "@id": "1", "para": "Ana", "de": "Bruno", "corpo": "Oi!" } }
O atributo id vira “@id”, cada elemento filho vira uma chave e o texto dentro de <corpo> vira um valor de texto. Desligue “Detectar números e booleanos” para manter todos os valores — inclusive o id — como texto.
Regras, limites e problemas conhecidos
- Sem upload de arquivo, arrastar e soltar ou busca por URL: cole o texto. Uma área de soltar consumiria a altura de que o resultado precisa, e ler arquivos corretamente implica lidar com codificações que não são UTF-8 — abra o arquivo no formatador de XML (GB18030, Big5, Windows-1256) e copie o texto.
- A entrada é limitada a 1.000.000 de caracteres; acima de 200.000 o resultado espera até você parar de digitar e avisa. Acima do limite rígido você recebe um erro explícito — a entrada nunca é truncada silenciosamente.
- O mapeamento é fixo de propósito: um elemento vira objeto; um atributo vira “@nome”; o texto do elemento vira “#text”; um elemento filho vira chave; e vários filhos com o mesmo nome viram array. Um elemento folha só com texto vira uma string simples, para que um documento profundamente aninhado continue legível.
- A detecção de tipos (XML → JSON) é conservadora: só true / false / null (apenas em minúsculas) e números JSON estritos são convertidos em tipos reais. Um inteiro com zero à esquerda (00501) e um número com 16 dígitos ou mais permanecem texto; todo o resto permanece texto quando a opção está desligada. Atributos são sempre mantidos como texto, nunca reinterpretados, porque atributos XML são textuais.
- JSON → XML precisa de uma raiz única, então um objeto no nível superior usa sua única chave como elemento raiz. Um array JSON no nível superior não tem raiz única e é envolvido no elemento “Nome da raiz”, com cada item virando um filho repetido (chamado “item” por padrão).
- Um valor JSON sob uma chave pode ser objeto, array, string, número, true / false ou null. Chaves “@nome” viram atributos (null / undefined são ignorados); “#text” vira o texto do elemento; toda outra chave vira um elemento filho. Arrays produzem elementos repetidos.
- Comentários XML, instruções de processamento (<? … ?>) e o DOCTYPE são descartados e contados (não podem ser representados em JSON); CDATA é mantido como texto. Conteúdo misto — texto ao lado de elementos filhos — é achatado em “#text” e sua ordem original não é preservada; os elementos afetados são contados para você perceber.
- O JSON é interpretado de forma estrita: sem comentários, sem vírgulas finais, sem aspas simples, sem caracteres de controle sem escape, aninhamento de até 64 níveis. Um objeto por linha (JSON Lines) não é aceito — coloque os objetos dentro de um array primeiro.
- Referências de entidade XML (& < >) são mantidas literalmente no texto e nos atributos (não são decodificadas), para que uma ida e volta reproduza os bytes exatos. O escape é adicionado no lado JSON → XML: & < > recebem escape no texto, e “ recebe escape em valores de atributo.
- Fora do escopo: XSLT, XPath, validação de XML Schema, namespaces como algo além de parte do nome da tag, JSON com chaves duplicadas (a última vence, como em JSON.parse) e preservação da ordem de comentários. Nada é enviado, armazenado ou colocado na URL.
Ferramentas relacionadas
O que as pessoas costumam precisar depois, quando os dados já estão no outro formato.