FreeToGenerate.com

100% gratuito · sem registo · tudo no seu navegador

0
Opções
Indentação

Não existe nenhuma norma para este mapeamento, por isso esta ferramenta segue o mais comum: os atributos passam a chaves com o prefixo @, e o texto próprio de um elemento passa a #text. Outras ferramentas usam convenções diferentes, pelo que o JSON daqui nem sempre carregará da mesma forma noutro sítio.

Tudo corre no seu navegador. Nada é enviado.

Também disponível em: English · Español · Français · العربية

Converter XML para JSON

Cole XML e obtenha JSON pela convenção do @ e do #text, com um relatório honesto de tudo o que a conversão teve de deixar para trás.

O que envolve converter XML para JSON

XML e JSON descrevem ambos dados estruturados, mas não têm a mesma forma, e é aí que está toda a dificuldade. Os elementos XML podem ter atributos além de conteúdo, a mesma etiqueta pode repetir-se quantas vezes for preciso, e o texto pode ficar entre elementos filhos. O JSON tem objetos, arrays, cadeias, números, booleanos e null, e nenhuma noção de atributo. Converter entre os dois é, portanto, escolher como escrever as ideias a mais do XML no vocabulário mais curto do JSON.

Para essa escolha não existe norma. O W3C nunca definiu uma codificação JSON do XML, por isso cada ferramenta adota uma convenção e as convenções não coincidem. Este conversor usa a mais partilhada — os atributos passam a chaves com o prefixo @ e o texto próprio de um elemento passa a #text — que é a do Json.NET da Newtonsoft, do xml2js e do Spark. Outras diferem: a BadgerFish usa $ para o texto e a convenção Parker descarta os atributos por completo.

Como o mapeamento é uma escolha e não uma regra, esta página diz qual convenção usa e comunica, para o seu documento concreto, que peças não conseguiram passar. Isso é mais útil do que um conversor que descarta coisas em silêncio e apresenta o resultado como estando completo.

Como converter XML para JSON

  1. Cole o seu XML no painel da esquerda. O JSON aparece à direita à medida que escreve, sem qualquer botão para carregar. «Carregar um exemplo» preenche o painel com um pequeno catálogo que mostra atributos, elementos repetidos e um comentário.
  2. Escolha com que rigor ler os valores. Por omissão todos os valores continuam a ser cadeias, porque o XML não tem tipos. Ao ligar a leitura de tipos, 42 passa a número e true a booleano, mas tudo o que uma ida e volta alteraria — como 01234 ou 1.10 — fica como texto.
  3. Leia o relatório de perdas e copie. Por baixo dos painéis, a ferramenta lista o que a convenção não conseguiu representar e quantas vezes ocorreu. Se disser que nada foi perdido, o documento encaixa exatamente na convenção. «Copiar resultado» leva o JSON para a área de transferência.

O que a convenção faz com atributos, repetições e texto

Um atributo passa a ser uma chave com um @ à frente, e é isso que o mantém distinguível de um elemento filho com o mesmo nome. Sem esse prefixo, um elemento com atributo id e um elemento com um filho id dariam JSON idêntico, e a conversão de volta seria uma moeda ao ar.

Uma etiqueta repetida passa a array, e uma etiqueta que aparece uma só vez fica como valor simples. Essa regra é a que a maioria das pessoas espera ao olhar para o resultado, e é também a origem da única assimetria real entre estes dois formatos: em XML nada marca uma lista, por isso uma lista que por acaso tem um item parece exatamente igual a um valor único.

O texto próprio de um elemento passa a #text quando esse elemento também tem atributos ou filhos, e passa a ser diretamente o valor quando não tem nenhum dos dois. Um elemento vazio passa a null. Estas escolhas mantêm o caso comum — um elemento folha com uma cadeia — o mais curto possível, em vez de embrulhar cada valor num objeto por uniformidade.

O que não consegue passar, com franqueza

Há quatro coisas sem lugar na convenção, e a ferramenta comunica cada uma em vez de a descartar em silêncio: os comentários, as instruções de processamento, a declaração doctype e as secções CDATA, que chegam como texto normal e por isso perdem o facto de alguma vez terem sido marcadas como texto em bruto.

O conteúdo misto é o caso mais subtil. Um parágrafo com uma palavra a negrito no meio de uma frase coloca texto antes, entre e depois dos seus elementos filhos. A convenção tem uma única ranhura #text, por isso o texto sobrevive mas a sua posição relativamente aos elementos não. Se o seu XML se parece mais com um documento do que com um registo, essa é uma limitação real e a ferramenta dirá isso mesmo.

A direção contrária tem o seu próprio buraco, e vale a pena conhecê-lo antes de confiar numa ida e volta. A conversão de JSON para XML e de volta foi medida em cerca de 1700 documentos gerados: 72,8% regressaram idênticos. Todas as falhas, sem exceção, deviam-se a exatamente duas causas: um array com um só item, que é escrito como uma etiqueta única e relido como um valor simples, ou um array aninhado dentro de outro array, que não tem forma de ser escrito como etiqueta repetida e fica achatado. Descontadas essas duas, o resíduo por explicar foi zero, por isso os limites são precisamente esses e mais nenhum.

Os espaços de nomes são mantidos tal como foram escritos, prefixo incluído, em vez de resolvidos. O prefixo continua a fazer parte do nome da chave, por isso ns:title passa a ser a chave ns:title. Isso é fiel ao documento, mas implica que quem consome o JSON tem de conhecer o prefixo, já que o JSON não tem qualquer mecanismo de espaços de nomes que transporte essa ligação.

Porque é gratuito

A conversão é uma análise e uma reescrita, e ambas acontecem no seu navegador enquanto escreve. Nada é enviado, por isso não há custo de servidor a recuperar nem motivo para lhe pedir uma conta antes de poder converter o seu próprio documento.

Isso significa também que não há marca de água, nem um limite de tamanho colocado para o empurrar para uma subscrição, nem um teto de documentos que possa processar.