Ir para o conteúdo principal

Conversor JSON para XML (JSON to XML)

Execute Converter para ver o resultado aqui.

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 &#13;, 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

  1. Cole ou digite o seu JSON na caixa de entrada. Nada é executado enquanto você digita.
  2. Escolha a indentação (“2 espaços” ou “4 espaços”) e aperte “Converter”.
  3. Leia o XML ao lado da entrada. Se a conversão for recusada, a mensagem explica o motivo.
  4. 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.

Todas as ferramentas