Converta JSON em XML simples e legível, com os seus números e textos copiados exatamente como foram escritos.
O que ela faz
O JSON to XML transforma JSON em XML simples e legível: uma linha de declaração, um elemento raiz e um elemento para cada valor, com o nome da sua chave. Uma lista vira o mesmo elemento repetido uma vez para cada entrada. Números e textos são copiados exatamente como foram escritos.
O XML não tem números, true ou false, null nem listas, então o resultado serve para ser lido e usado como XML, não para voltar ao mesmo JSON. A ferramenta ou escreve o XML ou recusa e explica por quê. Ela nunca altera os seus textos nem os seus números; a única coisa que ela ajusta é uma chave que o XML não aceita como nome, por uma regra fixa descrita abaixo.
O que ela aceita
- Qualquer valor JSON pode ser o nível principal. O resultado começa com a linha <?xml version="1.0" encoding="UTF-8"?> e tem um único elemento raiz, root, que contém o documento inteiro.
- Cada membro de um objeto vira um elemento com o nome da sua chave. Um membro cujo valor é uma lista vira esse elemento repetido uma vez para cada entrada, na ordem. Uma lista no nível principal, ou dentro de outra lista, é escrita com elementos item.
- Strings, números e booleanos são escritos como o texto do elemento. Os números são copiados exatamente como foram escritos: 9007199254740993, 2.370 e 1e400 saem sem alteração.
- null e o objeto vazio são escritos como um elemento de tag única, como <note/>. A string vazia é escrita como um elemento sem nada entre as tags, como <note></note>. Uma lista vazia que é o valor de uma chave não deixa elemento nenhum.
- Uma chave que não é um nome XML válido é ajustada: cada caractere que um nome XML não pode ter vira um sublinhado, uma chave vazia vira _, e um nome que começa com dígito, hífen ou ponto, ou com as letras xml em qualquer caixa, ganha um sublinhado na frente. Assim, “1abc” vira _1abc, “with space” vira with_space e “x:y” vira x_y. Letras acentuadas, outros alfabetos e emojis são mantidos.
- Quando duas chaves acabam com o mesmo nome, por exemplo “a b” e “a_b”, todos os elementos são mantidos, na ordem.
- Os caracteres & < > no texto recebem escape, e um retorno de carro é escrito como , então um <b> literal numa string nunca vira um elemento e um leitor de XML devolve cada string exatamente como era. As aspas ficam como estão.
Bom saber
- O XML não pode ser convertido de volta no mesmo JSON. O XML não tem tipos, então o número 1 e a string “1” são escritos iguais, uma lista com uma entrada parece um valor comum, uma lista vazia não deixa elemento e null e o objeto vazio são ambos elementos de tag única. Se você precisa manter essas diferenças, guarde o JSON.
- Um nome repetido dentro de um objeto é recusado. Os leitores de XML divergem sobre qual valor vale, então a ferramenta não mantém um e descarta o outro. Deixe os nomes únicos e converta de novo.
- Uma string com um escape substituto (surrogate) sem par, como \ud800, é recusada porque não pode ser escrita com fidelidade em XML.
- O XML 1.0 proíbe a maioria dos caracteres de controle (como \u0000, o backspace \b e o avanço de página \f), exceto tabulação, quebra de linha e retorno de carro, e também os caracteres U+FFFE e U+FFFF. Uma string que contém um deles é recusada. A ferramenta nunca troca nem remove caracteres do seu texto. Um caractere proibido numa chave não causa recusa, porque a chave é ajustada como qualquer outro nome inválido.
- Toda recusa informa o seu motivo específico. Para caracteres proibidos, ela não indica linha e coluna, então procure no seu JSON escapes de caracteres de controle como \u0000.
- O XML é maior que o JSON de origem (tags, indentação, escapes). Se o resultado completo passar do limite de tamanho, ele é recusado com uma prévia incompleta (veja abaixo).
Como usar
- Cole ou digite o seu JSON 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 XML ao lado da entrada. Se a conversão for recusada, a mensagem explica o motivo.
- Aperte “Copiar” para colocar o XML na área de transferência, ou “Baixar” para salvá-lo como converted.xml.
Exemplos
XML simples a partir do JSON
Cole este JSON e aperte “Converter”. O resultado começa com uma declaração e tem um elemento raiz. A chave “first name” não é um nome XML válido, então vira first_name. A lista é escrita como o elemento tags repetido uma vez para cada entrada, o número 2.50 mantém o zero final, e null vira um elemento de tag única.
{ "first name": "Ada", "tags": ["json", "xml"], "score": 2.50, "note": null }<?xml version="1.0" encoding="UTF-8"?>
<root>
<first_name>Ada</first_name>
<tags>json</tags>
<tags>xml</tags>
<score>2.50</score>
<note/>
</root>Um caractere que o XML não aceita
O texto contém \u0007, o escape do caractere de sino. O XML 1.0 não o permite, então a ferramenta recusa em vez de alterar o texto.
{"note": "ring\u0007"}Uma string contém um caractere que o XML 1.0 não permite, como um caractere de controle. Alterar o texto mudaria seus dados, então a conversão foi recusada.
Nomes repetidos
O nome “id” aparece duas vezes no mesmo objeto, então a ferramenta recusa em vez de escolher um dos dois valores.
{"id": 1, "id": 2}Um objeto repete o nome de um membro. Cada programa decide qual valor vale, então a conversão foi recusada em vez de manter um valor e descartar o outro. Deixe os nomes únicos e tente novamente.
O que o XML não consegue distinguir
Cole este JSON e aperte “Converter”. No resultado, n e s ficam iguais, one parece um valor comum, empty não aparece, e obj e nil são ambos elementos de tag única.
{ "n": 1, "s": "1", "one": [1], "empty": [], "obj": {}, "nil": null }<?xml version="1.0" encoding="UTF-8"?>
<root>
<n>1</n>
<s>1</s>
<one>1</one>
<obj/>
<nil/>
</root>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é 256 níveis de objetos e listas dentro uns dos outros. Um JSON 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.
Sua privacidade
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.