Conversor de XML para JSON

Converta dados XML para JSON. Transforme respostas de APIs XML legadas, payloads SOAP ou feeds RSS/Atom em JSON — atributos vão em @attributes, texto em #text, elementos repetidos viram arrays — direto no navegador.

Converter XML em JSON

Há ocasiões em que se quer ver o conteúdo de uma API XML herdada, de uma troca SOAP ou de um feed RSS ou Atom na forma de JSON a que se está acostumado. Esta ferramenta converte o XML que você cola e conclui todo o trabalho dentro do navegador, de modo que nada do que for colado sai do seu equipamento.

**Um conjunto de convenções é preciso justamente porque XML e JSON guardam os dados de maneiras radicalmente distintas.** O XML distingue atributos de texto e admite que um elemento de mesmo nome apareça quantas vezes for preciso; o JSON não tem nenhuma das duas coisas. Por isso os atributos são postos sob `@attributes`, a cadeia que um elemento sustenta diretamente sob `#text`, e os elementos repetidos viram arranjos. **O que não se pode contornar é a ambiguidade que surge quando um elemento repetível aparece uma única vez.** No XML original ele continua sendo uma ocorrência de algo repetível, mas em JSON parece um valor único, de sorte que o código receptor fica mais seguro se escrito para dar conta tanto de um elemento quanto de muitos.

Como se usa

  1. Cole o XML Uma resposta SOAP ou um feed RSS entram exatamente como estão.
  2. Revise a conversão **Os atributos assentam sob a chave `@attributes` e o texto sob `#text`.**
  3. Compare as estruturas Posto ao lado do XML original, dá para confirmar qual elemento foi parar sob qual chave.
  4. Copie ou baixe o resultado Cole-o direto no seu código ou guarde-o como arquivo.

Dicas para aproveitar melhor

  • Elementos com atributos são agrupados em um objeto `@attributes`, mantido separado do texto ou dos elementos filhos do próprio elemento.
  • Quando um elemento mistura atributos com elementos filhos ou texto, a parte de texto é armazenada em `#text`, para nunca ser confundida com um valor de atributo.
  • Elementos irmãos que compartilham o mesmo nome são automaticamente agrupados em um array: três tags `` viram um array de 3 elementos, enquanto uma única permanece como um objeto simples.
  • Um elemento vazio sem atributos, texto ou filhos (por exemplo ``) é convertido em `null`.
  • Prefixos de namespace como `xmlns` não são separados — um elemento continua com a chave `ns:tag`, prefixo incluído.

Quando é útil

Ao ligar uma API XML a código que só entende JSON

Quando o lado receptor não lida senão com JSON, você pode fixar de antemão a forma convertida.

Ao analisar um feed RSS ou Atom

Converter as entradas do feed para JSON as torna bem mais fáceis de percorrer com um script tal como estão.

Ao ler o conteúdo de uma resposta SOAP

**O SOAP, difícil de ler pelo aninhamento e pelos espaços de nomes, fica bem mais claro depois de desdobrada a hierarquia como JSON.**

Ao montar dados para testes

Você pode derivar um simulacro em JSON a partir de uma resposta XML real.

Termos da convenção de conversão

@attributes
**A chave que abriga os atributos de um elemento XML.** Como o JSON não conhece a noção de atributo, concede-se a eles uma chave própria.
#text
A chave que abriga a cadeia que um elemento sustenta diretamente. Torna-se necessária num elemento que tem ao mesmo tempo atributos e elementos filhos.
Elemento repetido
Um elemento que aparece mais de uma vez com o mesmo nome. **Em JSON vira um arranjo, mas uma ocorrência solitária figura como valor único e não como arranjo de um só elemento.**
Prefixo de espaço de nomes
A parte `soap:` de `soap:Body`. Em JSON ele sobrevive intacto como parte do nome da chave.
Conteúdo misto
Texto e elementos filhos convivendo dentro de um mesmo elemento. **O JSON não tem estrutura equivalente, e é aqui que a informação mais facilmente se perde na conversão.**
Elemento raiz
O único elemento situado no topo do XML. Torna-se a chave mais externa do JSON.

Perguntas frequentes

Os atributos de cada elemento são agrupados em uma chave `@attributes` contendo um objeto. Por exemplo, `` vira `{"@attributes": {"category": "fiction"}, ...}`, mantido separado do valor próprio do elemento (seu texto ou filhos) para nunca serem confundidos.

Quando elementos irmãos sob o mesmo pai compartilham um nome, eles são automaticamente agrupados em um array. Por exemplo, duas tags `` geram uma chave `book` cujo valor é um array de 2 elementos; uma única `` permanece como um objeto simples.

A causa mais comum é uma tag de fechamento ausente ou incompatível (fechada com um nome diferente do de abertura). O XML também exige exatamente um elemento raiz, então colar vários elementos de nível superior como `......` também causará falha.

Esta ferramenta só oferece suporte à direção XML para JSON. Se precisar formatar ou validar JSON ou XML separadamente, confira as outras ferramentas de formatação deste site.

Os prefixos de namespace são mantidos como estão, sem serem separados, então um elemento continua com a chave `ns:tag`. A resolução de namespace (associar o prefixo à sua URI) não é feita, então um XML com namespaces complexos pode não se converter na estrutura esperada.
Tool-kun

Curiosidade — Por que não existe uma única forma "correta" de transformar XML em JSON

Diferente do simples mapeamento linha-para-objeto entre CSV e JSON, não existe uma convenção universalmente aceita para converter entre XML e JSON. O XML permite que atributos, nós de texto e elementos filhos coexistam dentro de um mesmo elemento, enquanto o JSON só tem pares chave-valor simples — então alguma convenção precisa ser escolhida no momento da conversão. Implementações importantes como xml2json, xml-js e org.json adotaram, cada uma, regras diferentes sobre como representar atributos e como tratar texto que coexiste com elementos filhos.

Ainda assim, desenvolvedores continuam encontrando XML com frequência. APIs web baseadas em SOAP, integrações de sistemas com décadas de existência nas áreas financeira, governamental e de saúde, feeds RSS/Atom e arquivos de layout do Android são apenas algumas das áreas onde o XML ainda é o formato padrão hoje. Existe uma necessidade persistente de pegar dados extraídos desses sistemas legados e alimentá-los em um conjunto de ferramentas moderno que só entende JSON — processando-os com jq ou manipulando-os como um objeto simples em JavaScript.

A convenção `@attributes`/`#text` usada por esta ferramenta é uma escolha prática e comum, não uma notação carregada de símbolos. Elementos-folha sem atributos são convertidos diretamente para seu valor de texto, o que mantém legíveis como JSON simples valores de configuração básicos ou um título de RSS, enquanto elementos que possuem atributos são explicitamente separados — assim, basta olhar o resultado convertido para saber exatamente quais valores eram originalmente atributos.