Converta XML em JSON, com os atributos como chaves iniciadas por @ e os elementos repetidos reunidos em arrays, para manter a estrutura do documento.
O que é o XML to JSON?
O XML to JSON é uma ferramenta online gratuita que converte XML em JSON no seu navegador, mantendo a estrutura: o elemento raiz vira o nome do nível superior, os atributos viram nomes que começam com @ e os elementos que se repetem viram uma lista.
Ele lê um documento XML bem formado e recusa o que não for, informando onde está o primeiro problema. Nada a que o XML faça referência é carregado.
O que ela aceita
- Um documento XML bem formado, com um único elemento raiz. A declaração XML, os comentários e as instruções de processamento são aceitos e ficam de fora do JSON.
- O nome do elemento raiz é o único nome do nível superior do resultado, como em {"library": …}. Os prefixos de namespace continuam nos nomes (n:child), e as declarações de namespace são escritas como atributos (@xmlns:n).
- Um elemento só com texto vira um texto JSON. Um elemento sem texto, sem atributos e sem filhos vira null.
- Os atributos viram nomes que começam com @, escritos primeiro e na ordem em que aparecem.
- O texto que fica ao lado de atributos ou de elementos filhos vai para #text. O texto é aparado nas duas pontas, e os trechos de texto separados por elementos filhos são unidos com um espaço. As seções CDATA são lidas como texto simples, e as cinco entidades predefinidas (&, <, >, " e ') e as referências numéricas, como A, são decodificadas.
- Os elementos filhos com o mesmo nome viram uma lista, colocada onde aparece o primeiro deles. Um elemento que aparece uma vez continua sendo um valor único. Os elementos são agrupados por nome, então irmãos que se alternam, como a b a, saem como uma lista a seguida de b.
- Todo valor é texto, porque o XML não tem tipos: 12.50 e true continuam texto.
Bom saber
- A conversão não pode ser revertida com certeza. O XML não diz se um item é uma lista de um elemento ou um valor único, então um elemento que aparece uma vez é um valor único e só os elementos repetidos viram lista. O código que lê o JSON deve aceitar os dois casos.
- Comentários, instruções de processamento e a declaração XML são descartados, e a posição do texto entre os elementos filhos também.
- Um DOCTYPE é lido, mas nunca seguido. Uma entidade personalizada que ele declara não é expandida, e a referência a ela é recusada em vez de ficar no texto. Nada a que o DOCTYPE faça referência é carregado.
- O XML precisa estar bem formado: tags que combinam, uma única raiz, atributos entre aspas, sem < nem & soltos. Um documento nunca é corrigido, e o primeiro problema é informado com a linha e a coluna. Vários elementos lado a lado, sem uma raiz comum, são recusados.
- Os namespaces são verificados, mas não interpretados. Um prefixo precisa ser declarado, mas continua sendo parte do nome, então dois prefixos para o mesmo namespace dão dois nomes diferentes.
Como usar o XML to JSON?
- Cole ou digite o seu XML na caixa de entrada. Nada é executado enquanto você digita.
- Escolha a indentação (“2 espaços” ou “4 espaços”) e aperte “Converter”.
- Leia o JSON ao lado da entrada. Se o XML não estiver bem formado, ou se a conversão for recusada, a mensagem explica o motivo e informa a linha e a coluna.
- Aperte “Copiar” para colocar o JSON na área de transferência, ou “Baixar” para salvá-lo como converted.json.
Exemplos
Elementos e atributos
Cole este XML e aperte “Converter”. O elemento raiz, library, vira o único nome do nível superior. Os dois elementos book têm o mesmo nome, então viram uma lista. Os atributos id e lang viram os nomes @id e @lang, escritos antes dos elementos filhos, e o texto de title e author vira um texto simples.
<library>
<book id="1" lang="en">
<title>Dune</title>
<author>Frank Herbert</author>
</book>
<book id="2" lang="en">
<title>Emma</title>
<author>Jane Austen</author>
</book>
</library>{
"library": {
"book": [
{
"@id": "1",
"@lang": "en",
"title": "Dune",
"author": "Frank Herbert"
},
{
"@id": "2",
"@lang": "en",
"title": "Emma",
"author": "Jane Austen"
}
]
}
}Uma tag de fechamento que não corresponde
O elemento b ainda está aberto quando chega a tag de fechamento </a>, então o XML não está bem formado e nada é convertido. A mensagem informa a linha e a coluna da tag de fechamento.
<a><b></a>Esta tag de fechamento não corresponde ao elemento que está aberto. As tags de fechamento devem ser idênticas às de abertura, inclusive em maiúsculas e minúsculas, e fechar na ordem inversa.
Linha 1, coluna 7
Texto junto a atributos, e elementos vazios
O texto de total fica ao lado de um atributo, então vai para um nome chamado #text, e total vira um objeto com @currency e #text. O elemento vazio note vira null, e o atributo id de order é escrito como @id antes dos filhos.
<order id="7"><total currency="BRL">12.50</total><note/></order>{
"order": {
"@id": "7",
"total": {
"@currency": "BRL",
"#text": "12.50"
},
"note": null
}
}Texto misturado com elementos
Quando um elemento contém texto e elementos filhos ao mesmo tempo, os trechos de texto são unidos com um espaço em #text, e os elementos filhos mantêm os seus próprios nomes. A posição do texto entre os filhos não é mantida.
<p>Hello <b>big</b> world</p>{
"p": {
"#text": "Hello world",
"b": "big"
}
}Uma entidade vinda de um DOCTYPE
O DOCTYPE declara uma entidade chamada who. A ferramenta lê o DOCTYPE, mas nunca o segue, então não expande &who; e recusa em vez de omiti-la. Só as cinco entidades predefinidas (&, <, >, " e ') e as referências numéricas, como A, são expandidas.
<!DOCTYPE note [<!ENTITY who "Ada">]>
<note>Hi &who;</note>Esta entidade não é uma das cinco entidades predefinidas do XML (&, <, >, " e '), e esta ferramenta não expande entidades declaradas em um DOCTYPE. Use uma das cinco ou uma referência numérica de caractere.
Linha 2, coluna 10
Limites e privacidade
Limites de tamanho
- Entrada: até 2.000.000 bytes de texto em UTF-8 (cerca de 2 MB). Letras acentuadas e emojis ocupam mais de um byte cada. Uma entrada maior é recusada.
- Resultado: também até 2.000.000 bytes. Se o resultado completo fosse maior, a ferramenta mostra apenas uma prévia incompleta dos primeiros 100.000 bytes, e essa prévia não pode ser copiada nem baixada.
- Aninhamento: até 128 níveis de elementos (a raiz é o nível 1; elementos com autofechamento também contam) dentro uns dos outros. Um XML mais profundo é recusado porque passa do que a ferramenta processa.
- Tempo: uma execução que demora mais que o seu limite de tempo é interrompida. Tente uma entrada menor.
Meu texto é enviado para um servidor?
Não. O texto que você digita ou cola, ou abre de um arquivo local, é processado localmente no seu navegador, em um Web Worker dedicado. Ele nunca é enviado para o servidor (um arquivo que você abre é lido apenas no seu navegador) e não é gravado em armazenamento, cookies nem na barra de endereços.
“Copiar” coloca o resultado na área de transferência e “Baixar” o salva como arquivo, mas só quando você aperta o botão. O arquivo é criado no seu navegador, então nada é enviado.
Para ver os detalhes completos, consulte a Política de Privacidade
Ferramentas e páginas relacionadas
O seu texto continua na página quando você troca de ferramenta na mesma aba, então dá para testar o mesmo texto em outra. Recarregar ou fechar a aba o encerra.