Conversor de XML para JSON
O que é conversão de XML para JSON?
XML to JSON converte marcação XML em uma estrutura JSON para que dados sejam tratados com mais facilidade em JavaScript, APIs, ferramentas no-code ou pipelines modernos. O mapeamento nem sempre é óbvio porque XML tem elementos, atributos, nós de texto, namespaces, ordem e nós repetidos, enquanto JSON usa objetos, arrays e valores simples. A ferramenta é útil para integrações legadas, respostas SOAP, sitemaps, feeds RSS, configurações e dados de teste. Em interfaces de produção, atributos, elementos vazios, conteúdo misto, namespaces e detecção de arrays devem ser revisados. JSON parseado corretamente não garante que toda informação de negócio foi preservada no formato pretendido.
Como Usar
Como usar
- Cole ou insira dados XML na caixa de entrada à esquerda
- Selecione o tamanho da indentação (2 espaços, 4 espaços ou Tab)
- O JSON convertido é exibido à direita com destaque de sintaxe
- Revise o resultado da conversão e corrija quaisquer erros do XML
- Clique em Copy ou Download para salvar o resultado
Notas sobre Estrutura de Dados
- Atributos XML, nós repetidos, namespaces e conteúdo misto podem ser convertidos para JSON de várias formas válidas; analise a estrutura gerada antes de utilizá-la.
- Para migração de API, defina uma regra de mapeamento de campos em vez de confiar em uma única conversão de exemplo.
Casos de uso
Princípio técnico
A conversão começa com o parser XML integrado do navegador. `new DOMParser().parseFromString(xmlString, 'application/xml')` retorna um `Document` que segue o W3C DOM Level 3 Core, valida a formação correta conforme XML 1.0 (Quinta Edição) e expõe o resultado como uma árvore de nós `Element`, `Attr`, `Text`, `CDATASection` e `Comment`. Se a entrada for malformada, o parser não lança exceção — ele retorna um documento cujo elemento raiz é `<parsererror>` contendo a localização e o motivo, então o conversor verifica `doc.querySelector('parsererror')` primeiro e exibe essa mensagem em vez de produzir JSON parcial. O mapeamento da árvore para JSON percorre o documento em profundidade e segue uma convenção no estilo Badgerfish. Cada elemento torna-se uma propriedade cuja chave é o nome local; elementos filhos tornam-se objetos aninhados; atributos de elementos são achatados com o prefixo `@` (ex. `<user id="7">` → `{ "user": { "@id": "7" } }`); conteúdo de texto ao lado de elementos filhos é armazenado sob `#text`. Elementos irmãos repetidos com o mesmo nome são agrupados em um array JSON: dois nós `<item>` tornam-se `"item": [ ... ]`, mas um único `<item>` permanece como objeto simples — esta é a conhecida ambiguidade de "único vs. múltiplo", porque XML não consegue distinguir uma lista de um elemento de um valor escalar enquanto JSON trata `"item": {...}` e `"item": [{...}]` como estruturas diferentes. Vários recursos do XML não possuem equivalente limpo em JSON e são intencionalmente com perdas. A ordem dos elementos é preservada pelo XML, mas não é garantida pela ordem de chaves de objetos JSON em todos os consumidores (embora o ES2015 especifique ordem de inserção para chaves de string, esquemas como JSON Schema não restringem isso). Conteúdo misto como `<p>Hello <b>world</b>!</p>` intercala texto com elementos e não pode ser convertido de volta para o modelo simples de chave-valor. Namespaces XML em notação Clark (`{http://example.com/ns}user`) são reduzidos ao nome local `user`, que pode colidir com um elemento sem namespace de mesmo nome. Blocos CDATA como `<![CDATA[<raw>]]>` são expandidos em texto simples. Instruções de processamento (`<?xml-stylesheet ...?>`), comentários (`<!-- ... -->`) e a declaração XML são descartados porque JSON não possui sintaxe para eles. A indentação é aplicada via `JSON.stringify(value, null, indent)` com 2 espaços, 4 espaços ou `'\t'`.
- Parser: `new DOMParser().parseFromString(xml, 'application/xml')` conforme W3C DOM Level 3 Core; erros aparecem como um elemento raiz `<parsererror>`, não uma exceção lançada.
- Convenções de mapeamento: estilo Badgerfish com `@attr` para atributos, `#text` para texto misto, nome local do elemento para filhos; Parker descarta atributos, Spark os mantém em `$`.
- Filhos repetidos com o mesmo nome são agrupados em um array JSON; um único filho permanece como objeto — a ambiguidade clássica de "único vs. múltiplo" não possui solução do lado XML.
- Recursos com perdas: atributos (sem prefixo `@`), namespaces (`xmlns:foo`), instruções de processamento, comentários, declaração XML e blocos CDATA.
- Conteúdo misto (`<p>Hello <b>world</b>!</p>`) não pode ser convertido de volta para JSON chave-valor; a ordem dos elementos pode ser perdida em consumidores que não preservam a ordem das chaves.
- Conversão de número/booleano é uma escolha deliberada: `<age>30</age>` pode se tornar `30` (número) ou `"30"` (string); zeros à esquerda (`007`) devem permanecer como strings.
- A formatação de saída usa `JSON.stringify(value, null, indent)` com indentação de 2 espaços, 4 espaços ou `'\t'`; o resultado é UTF-8 sem BOM.
Exemplos
Elemento simples
<root>
<name>John</name>
</root>
→
{"root": {"name": "John"}}Elementos repetidos
<root>
<item>A</item>
<item>B</item>
</root>
→
{"root": {"item": ["A", "B"]}}Estrutura aninhada
<root>
<user>
<name>John</name>
<age>30</age>
</user>
</root>
→
{"root": {"user": {"name": "John", "age": 30}}}Perguntas frequentes
Como os elementos XML são mapeados para JSON?
Cada elemento vira uma propriedade JSON cujo valor é o conteúdo do elemento (string ou objeto aninhado). Elementos repetidos com o mesmo nome viram arrays. Os atributos costumam ser prefixados com '@' ou armazenados em uma chave especial como '$'. A convenção exata varia e é configurável na maioria das páginas.
Por que a conversão de XML para JSON às vezes perde informação?
O XML distingue elementos, atributos, conteúdo de texto, conteúdo misto (texto e elementos), namespaces, instruções de processamento e comentários. O JSON tem só objetos, arrays, strings, números, booleanos e null. Mapear a árvore mais rica do XML para JSON faz perder informações sobre ordem e a distinção entre elemento e atributo.
Como elementos com conteúdo misto (texto + elementos filhos) são tratados?
Olá mundo!
não tem uma representação JSON limpa. A página normalmente usa uma chave especial (por exemplo, '#text' ou '$') para capturar o texto solto, mas a ordem entre texto e elementos nem sempre é preservada. Evite conteúdo misto se você pretende fazer ida e volta.E os namespaces XML?
Elementos com prefixo (<ns:foo>) viram chaves de string 'ns:foo' ou são divididos em propriedades de ns/local-name. Declarações xmlns podem ser preservadas como propriedades semelhantes a atributos ou descartadas, dependendo da configuração da página.
Consigo voltar do JSON para um XML idêntico?
O ida e volta não é, em geral, sem perdas, principalmente para conteúdo misto, comentários, instruções de processamento e ordem dos atributos. Para XML somente de dados (configuração, registros simples), o ida e volta costuma funcionar. Para XML estilo documento (DocBook, HTML, RSS), use um parser XML de verdade.
Um elemento XML vazio <foo/> é igual a <foo></foo>?
Sim, para o parser. Os dois produzem uma propriedade foo com string vazia ou valor null. A sintaxe autofechada é puramente cosmética em XML.
A conversão é local?
Sim. A análise do XML e a geração do JSON acontecem no seu navegador. A página não envia seus dados.