Conversor de JSON para XML e XML para JSON

Converta XML em JSON e JSON em XML online: atributos, arrays, CDATA e namespaces, com convenção clara (@atributo, #text). Roda no seu navegador.

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.

Sentido da conversão

Como usar

  1. Escolha XML → JSON ou JSON → XML.
  2. Cole o conteúdo (ou clique em Exemplo).
  3. Ajuste as opções: conversão de tipos, atributos, namespaces, nome da raiz, indentação.
  4. 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" e true sã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 XMLNo JSON
Elemento só com textoString: "nome": "Ana"
Elemento vazioString vazia: "obs": ""
Atributo id="7"Chave com arroba: "@id": "7"
Texto de elemento que também tem atributos ou filhosChave "#text"
Elementos irmãos com o mesmo nomeArray
Elemento raizChave única do objeto do topo
CDATATexto comum (o conteúdo é preservado, a marcação CDATA não)
Comentários, DOCTYPE, instruções de processamentoDescartados

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> vira 2 em vez de "2". Fica desligado por padrão porque nem tudo que parece número é número: com a opção ligada, 3499.90 vira 3499.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> vira Body e as declarações xmlns somem. Ú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 (raiz por 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 #text vira 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.
  • null e 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 dois a foram 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 é &amp; e &lt;) e entidades desconhecidas. Só as cinco entidades predefinidas do XML (&amp;, &lt;, &gt;, &quot;, &apos;) e as referências numéricas (&#233;, &#xE9;) são aceitas; entidades do HTML, como &nbsp;, 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.