Ir para o conteúdo principal

XML to JSON

Converta XML em JSON, mantendo os atributos.

Entrada XML

Lin 1, Col 1
XML

Resultado

Seu resultado aparecerá aqui

Adicione XML acima e escolha Converter.

Adicione XML à esquerda e escolha Converter.

Aguardando entrada

2 espaços

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?

  1. Cole ou digite o seu XML 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 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.
  4. 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 (&amp;, &lt;, &gt;, &quot; e &apos;) e as referências numéricas, como &#65;, são expandidas.

<!DOCTYPE note [<!ENTITY who "Ada">]>
<note>Hi &who;</note>

Esta entidade não é uma das cinco entidades predefinidas do XML (&amp;, &lt;, &gt;, &quot; e &apos;), 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.

Todas as ferramentas