Também disponível em: English · Español · Français · العربية
Converter JSON para XML
Cole JSON e obtenha XML pela convenção do @ e do #text, com um aviso honesto onde a forma dos seus dados não sobreviver à viagem de regresso.
O que envolve converter JSON para XML
JSON e XML conseguem descrever os mesmos dados, mas não têm as mesmas articulações. O JSON tem objetos e arrays; o XML tem elementos que podem repetir-se, atributos pendurados numa etiqueta e texto que pode conviver dentro de um elemento ao lado dos seus filhos. Passar de JSON para XML é, portanto, decidir que chave se torna etiqueta, qual se torna atributo e o que fazer com um array — nada disso marcado pelo próprio JSON.
Para essa decisão 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, a mesma do Json.NET da Newtonsoft, do xml2js e do Spark: uma chave começada por @ passa a atributo, uma chave chamada #text passa a ser o texto próprio do elemento, e qualquer outra chave passa a elemento filho. 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 avisa-o, para o seu documento concreto, de tudo o que não voltará igual se converter no sentido inverso.
Como converter JSON para XML
- Cole o seu JSON no painel da esquerda. O XML 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, um elemento repetido e um array.
- Defina o formato de saída. Escolha uma linha só ou uma indentação de dois ou quatro espaços, e decida se quer incluir a declaração XML no topo. Ambas as opções afetam apenas o texto que recebe, nunca a estrutura.
- Leia os avisos e copie. Por baixo dos painéis, a ferramenta lista tudo o que a forma dos seus dados não permite recuperar e quantas vezes ocorre. Se disser que nada se perdeu, o seu documento cabe dentro da convenção. «Copiar resultado» leva o XML para a área de transferência.
O que a convenção precisa do seu JSON
O XML permite exatamente um elemento raiz, por isso o JSON tem de ser um objeto com uma única chave que lhe dê nome. Um array no nível de topo, ou um objeto com duas chaves, não tem forma fiel de ser escrito como documento, e a ferramenta di-lo em vez de inventar uma etiqueta envolvente que não pediu.
Abaixo da raiz, as chaves começadas por @ passam a atributos e uma chave #text passa a ser o texto próprio do elemento. É isso que permite a um elemento levar ao mesmo tempo um atributo e conteúdo: um objeto com @id e #text produz uma etiqueta com atributo id à volta de um pedaço de texto, exatamente o que teria escrito à mão.
Um array passa a ser a mesma etiqueta repetida uma vez por item, porque é assim que o XML exprime uma lista — não há parênteses retos. Essa regra lê-se com naturalidade no resultado e é também a origem da principal limitação abaixo, já que o XML não tem forma de marcar que uma repetição alguma vez pretendeu ser uma lista.
O que não sobrevive à viagem de regresso, com franqueza
A conversão de JSON para XML e de volta foi medida em cerca de 1700 documentos gerados: 72,8% regressaram idênticos byte a byte. Todas as falhas, sem exceção, deviam-se a exatamente duas causas, e descontadas essas o resíduo por explicar foi zero — por isso os limites abaixo são precisamente esses e mais nenhum.
A primeira é um array com um só item. É escrito como uma etiqueta única, e uma etiqueta única é relida como um valor simples, porque nada no XML diz que se pretendia uma lista. Um array com dois ou mais itens regressa bem; o buraco é especificamente o array de um. A ferramenta assinala-o quando o encontra.
A segunda é um array aninhado dentro de outro array. Repetir uma etiqueta consegue exprimir um nível de lista e não mais, por isso os arrays interiores ficam achatados dentro do exterior. Também é assinalado.
Há dois pormenores sobre nomes que vale a pena conhecer. Uma chave JSON pode ser qualquer cadeia, mas um nome de etiqueta XML não: uma chave com um espaço, ou começada por um dígito, não é uma etiqueta legal. Em vez de emitir XML malformado, o conversor renomeia essas chaves — «first name» passa a «first_name» — e avisa que o fez, porque a própria chave mudou. À parte disso, uma chave que contenha dois pontos é escrita como nome qualificado por espaço de nomes. Isso é XML bem formado, mas só é válido segundo a especificação de espaços de nomes se a declaração xmlns correspondente também estiver no seu JSON, o que convém verificar se escreve prefixos à mão em vez de fazer a volta a um documento que já os trazia.
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 os seus próprios dados.
Isso significa também que não há marca de água no resultado, nem um limite de tamanho colocado para o empurrar para uma subscrição, nem um teto de documentos que possa processar.