Conversor de XML para JSON e de JSON para XML
Escolha o sentido, cole o conteúdo e converta. A ferramenta lê o XML com um analisador próprio, aponta linha e coluna quando o documento está malformado e segue uma convenção fixa e documentada, de modo que a ida e a volta devolvem a mesma estrutura. Nada é enviado a servidor: a conversão acontece no seu navegador.
Como usar
- Escolha XML → JSON ou JSON → XML.
- Cole o conteúdo (ou clique em Exemplo).
- Ajuste as opções: conversão de tipos, atributos, namespaces, nome da raiz, indentação.
- Clique em Converter e copie o resultado. O botão Usar como entrada e inverter leva o resultado de volta para o campo de entrada, no sentido contrário, para você conferir a ida e a volta.
Não existe um mapeamento único entre XML e JSON
XML e JSON não são dois jeitos de escrever a mesma coisa. O XML tem recursos sem equivalente direto no JSON, e o contrário também é verdade:
- Atributos:
<preco moeda="BRL">10</preco>guarda dois dados no mesmo elemento. No JSON só existem chaves e valores. - Tipos: no XML tudo é texto. No JSON,
10,"10"etruesão coisas diferentes. - Arrays: o JSON tem listas. No XML, uma lista é só o mesmo elemento repetido, e um elemento que aparece uma vez não diz se “poderia” ser lista.
- Conteúdo misto:
<p>Olá <b>mundo</b>!</p>intercala texto e elementos, e a ordem importa. Um objeto JSON não registra essa ordem. - Comentários, namespaces, instruções de processamento e DOCTYPE existem apenas no XML.
Por isso cada biblioteca escolhe uma convenção. Existem várias (BadgerFish, Parker, JsonML, entre outras), e a mesma entrada produz JSONs diferentes em cada uma. Ao trocar dados com outro sistema, confirme qual convenção ele espera.
A convenção desta ferramenta
É a mesma ideia usada por bibliotecas populares, como o xmltodict (Python) e o Json.NET: atributos com prefixo @ e texto em #text.
| No XML | No JSON |
|---|---|
| Elemento só com texto | String: "nome": "Ana" |
| Elemento vazio | String vazia: "obs": "" |
Atributo id="7" | Chave com arroba: "@id": "7" |
| Texto de elemento que também tem atributos ou filhos | Chave "#text" |
| Elementos irmãos com o mesmo nome | Array |
| Elemento raiz | Chave única do objeto do topo |
| CDATA | Texto comum (o conteúdo é preservado, a marcação CDATA não) |
| Comentários, DOCTYPE, instruções de processamento | Descartados |
Exemplo:
<pedido id="7">
<cliente>Ana</cliente>
<item qtd="2">Café</item>
<item qtd="1">Pão</item>
</pedido>{
"pedido": {
"@id": "7",
"cliente": "Ana",
"item": [
{ "@qtd": "2", "#text": "Café" },
{ "@qtd": "1", "#text": "Pão" }
]
}
}Opções de XML para JSON
- Converter números e true/false:
<qtd>2</qtd>vira2em vez de"2". Fica desligado por padrão porque nem tudo que parece número é número: com a opção ligada,3499.90vira3499.9. A ferramenta mantém como texto os valores com zero à esquerda (007, CEP, CPF) e os inteiros acima de 9.007.199.254.740.991 (2⁵³ − 1), como a chave de acesso de 44 dígitos da NF-e, que perderiam dígitos como número. - Ignorar atributos: descarta todos os atributos e deixa só elementos e texto.
- Remover namespaces:
<soap:Body>viraBodye as declaraçõesxmlnssomem. Útil para ler SOAP e NF-e sem prefixos; se dois elementos de namespaces diferentes tiverem o mesmo nome local, eles passam a dividir a mesma chave.
Opções de JSON para XML
- Nome do elemento raiz: todo XML precisa de exatamente um elemento raiz. Se o JSON for um objeto com uma única chave (e ela não for um array), essa chave é a raiz. Caso contrário, tudo é embrulhado no nome informado (
raizpor padrão). Um array no topo vira uma sequência de elementos<item>. - Arrays viram elementos repetidos com o nome da chave. Array dentro de array não tem nome próprio para os itens internos, então eles viram
<item>(com aviso). - Chaves com
@viram atributos, e#textvira o texto do elemento. - Escape:
&,<e>são escapados no texto; nos atributos, também as aspas duplas e simples. - Nomes inválidos: um nome XML não pode ter espaço nem começar por dígito. Chaves como
"meu dado"ou"1x"são ajustadas (meu_dado,_1x) e a ferramenta lista cada troca nos avisos. nulle string vazia viram elemento vazio (<obs/>). Arrays vazios não geram elemento.- Indentação de 2 ou 4 espaços, tabulação ou tudo em uma linha, e declaração
<?xml version="1.0" encoding="UTF-8"?>opcional.
O que é preservado na ida e volta
Seguindo a convenção acima, converter XML → JSON → XML (ou o inverso) devolve a mesma estrutura: elementos, atributos, texto, repetições e aninhamento. Alguns casos não sobrevivem, por limitação dos formatos:
- Array de um item só:
{"item": ["a"]}vira um único<item>, que volta como"item": "a". - Ordem entre elementos de nomes diferentes intercalados:
<a/><b/><a/>volta como<a/><a/><b/>, porque os doisaforam agrupados em um array. - Conteúdo misto: os trechos de texto são reunidos em um único
#text, e a posição deles entre os filhos se perde. Para HTML dentro de XML, prefira CDATA. - Espaços nas bordas do texto são aparados (o que não vale para o conteúdo de CDATA).
null, arrays vazios e tipos do JSON: no XML tudo vira texto. Ligue “Converter números e true/false” na volta para recuperar números e booleanos.- Comentários, DOCTYPE e instruções de processamento do XML original.
Erros de XML que a ferramenta aponta
O analisador exige um XML bem formado e informa linha e coluna do problema: tag aberta e não fechada, fechamento fora de ordem, mais de um elemento raiz, atributo sem aspas ou repetido, & ou < soltos no texto (o certo é & e <) e entidades desconhecidas. Só as cinco entidades predefinidas do XML (&, <, >, ", ') e as referências numéricas (é, é) são aceitas; entidades do HTML, como , não existem em XML puro, e entidades declaradas em DTD não são expandidas. A ferramenta não valida contra XSD.
Para apenas conferir ou arrumar um documento, use o Validador de XML, o Formatador de XML, o Validador de JSON ou o Formatador de JSON. Para dados em tabela, veja o Conversor CSV ⇄ JSON.
Perguntas frequentes
Por que meu JSON saiu diferente do gerado por outra ferramenta?
Porque não há padrão oficial para essa conversão. Outras ferramentas usam prefixos diferentes para atributos (_, -, $), guardam o texto em _text, $t ou __text, ou transformam todo elemento em array. O conteúdo é o mesmo; muda a forma. Esta página usa @ e #text.
Por que os números vieram entre aspas?
No XML não há tipos: <idade>30</idade> é o texto “30”. Por segurança, o padrão é manter texto. Marque Converter números e true/false para obter 30 e true sem aspas.
Como gerar um atributo XML a partir do JSON?
Use uma chave começando com @. O objeto {"produto": {"@id": 7, "#text": "Café"}} gera <produto id="7">Café</produto>.
A ferramenta converte NF-e, SOAP, RSS e sitemap?
Sim: são documentos XML comuns. Em NF-e e SOAP, a opção Remover namespaces costuma deixar o JSON mais simples de ler. Mantenha a conversão de tipos desligada para não alterar valores como 10.00 e códigos com zero à esquerda.
Meus dados são enviados para algum servidor?
Não. A leitura do XML e a geração do JSON (e vice-versa) são feitas por JavaScript no seu navegador. Pode converter documentos fiscais e respostas de API com dados reais.
Existe limite de tamanho?
A ferramenta aceita até 5 milhões de caracteres por conversão e 500 níveis de aninhamento. Arquivos de alguns megabytes são convertidos em menos de um segundo em um computador comum.