100 % local — seus dados nunca saem do seu navegador

XML para JSON — com os atributos

Converta XML em JSON. Atributos, elementos repetidos e texto caem todos num lugar que você alcança com um ponto ou um colchete no seu código.

Instantâneo Privado Zero cookies
Indentação

Entrada XML

Saída JSON

O que esta ferramenta faz

Cada elemento vira uma chave; seus filhos viram o valor.

<user id="1"><name>Ada</name></user>
{ "user": { "name": "Ada", "@_id": "1" } }

Três pontos em que os modelos divergem

XML e JSON não descrevem as mesmas formas, e todo conversor precisa escolher. Estas são as escolhas.

Os atributos

Viram chaves com prefixo @_. JSON tem um só tipo de membro; XML tem atributos e elementos, e eles podem ter o mesmo nome — <user id="1"><id>2</id></user> guarda duas coisas distintas chamadas id. O prefixo as separa. Uma opção descarta os atributos se você não precisar deles.

Quando um elemento carrega texto e atributos ao mesmo tempo, o texto fica sob #text.

A repetição

Um <item> dá um objeto. Dois dão um array.

<r><i>1</i></r>          →  { "r": { "i": 1 } }
<r><i>1</i><i>2</i></r>  →  { "r": { "i": [1, 2] } }

Não é um defeito corrigível: nada num documento XML diz se um elemento é repetível. Só um esquema sabe. Se o seu código espera uma lista, normalize na chegada.

O conteúdo misto

Este o JSON simplesmente não consegue exprimir, e é melhor dizê-lo sem rodeios.

<p>Olá <b>mundo</b> de novo</p>

O JSON não tem como dizer que Olá vinha antes de <b> e de novo depois. Os trechos de texto são reunidos sob #text e a posição deles em relação aos elementos se perde, junto com o espaçamento entre eles. Se o que importa é o texto — um documento, não um registro —, não converta: use o formatador XML.

Os tipos

<a>1</a> dá o número 1. <a>007</a> dá a string "007", porque um zero à esquerda costuma ser um CEP ou um número de conta, e lê-lo como sete o perde. Um identificador de vinte dígitos também continua string: um número JSON o arredondaria.

O que não é dado

A declaração XML e qualquer instrução de processamento são descartadas. Elas descrevem o documento, não o conteúdo — uma chave ?xml ao lado do seu elemento raiz nunca foi informação que você pediu.

Privado por padrão

Tudo é executado localmente no seu navegador com JavaScript. Os seus dados nunca são enviados para um servidor, o que torna a ferramenta segura para conteúdo sensível e funciona offline.

Perguntas frequentes

Por que meu único <item> virou objeto e não array?
Porque nada num documento XML diz se um elemento se repete. Um `<item>` é idêntico a uma lista de um, e só um esquema conhece a diferença. A partir de dois vira array; com um, objeto. Se o seu consumidor quer uma lista nos dois casos, normalize lá — `Array.isArray(x) ? x : [x]` é a linha habitual.
Por que os atributos levam o prefixo @_?
Porque JSON tem um só tipo de membro e XML tem dois. `<user id="1"><id>2</id></user>` guarda um atributo e um elemento ambos chamados `id` que não são a mesma coisa; sem prefixo, um sobrescreveria o outro. A opção remove os atributos por completo se você preferir não vê-los.
Por que <a>007</a> continua string e <a>7</a> vira número?
Porque o zero à esquerda quase sempre carrega sentido: um CEP, um número de conta, uma referência de peça. Ler `007` como o número sete o perde de vez. Um número sem zeros à esquerda é convertido; o que um número JSON não guarda exato, como um identificador de vinte dígitos, continua string pelo mesmo motivo.

Conversores relacionados