XML para JSON e vice-versa
Cole ou carregue um arquivo XML e receba o JSON correspondente, ou faça o caminho inverso. Se o XML estiver quebrado, dizemos a linha, a coluna e a regra que foi violada.
Ou solte aqui um arquivo .xml ou .json, ou toque para escolher um
Como ler a conversão
Um elemento XML vira um objeto JSON. Os atributos ganham o prefixo @, então <price currency="EUR">12.90</price> vira {"@currency":"EUR","#text":"12.90"}. Um elemento com apenas texto e sem atributos vira a própria string, e um elemento vazio vira null. Elementos irmãos com o mesmo nome viram uma lista, e o elemento raiz continua como a única chave no topo. A convenção não pode gerar conflito, porque a arroba e a cerquilha (#) não são permitidas dentro de um nome XML, então nenhum elemento jamais se chamará #text.
A armadilha da lista de um item só
É essa que pega você de surpresa em produção. Se o feed traz três elementos <row> , você recebe uma lista, mas se esse mesmo feed traz um só, você recebe um objeto, e o código que percorre a lista quebra num arquivo que parecia idêntico. Nenhum conversor consegue adivinhar isso só pelo XML, porque a cardinalidade mora no esquema (XSD), não nos dados. Por isso existe a caixa que sempre coloca os filhos em uma lista: ative-a quando um programa for ler o JSON e deixe-a desativada quando quiser um JSON agradável de ler.
O que não vai para o JSON
Comentários e instruções de processamento ficam de fora, porque o JSON não tem onde guardá-los, e a página avisa com um alerta em vez de descartá-los em silêncio. Seções CDATA viram texto puro. O DOCTYPE é ignorado, então as entidades declaradas em uma DTD não são resolvidas: se aparecer uma, a ferramenta para e diz qual. Os prefixos de namespace são mantidos literalmente (soap:Envelope continua soap:Envelope) sem resolver URIs. Os espaços no início e no fim do texto de um elemento são removidos.
Por que o erro informa linha e coluna
A leitura é feita por um parser escrito para esta página, e não pelo leitor de XML do navegador, que dá mensagens diferentes no Chrome, no Firefox e no Safari. Assim você recebe o ponto exato e a regra que foi violada: as aspas dos atributos XML são obrigatórias, as tags se fecham na ordem inversa em que foram abertas, só pode haver um elemento raiz, e um & sozinho precisa ser escrito &. Esses quatro estão por trás de quase toda exportação rejeitada. Se o arquivo a converter for YAML, o formato baseado em indentação, existe o YAML para JSON.
A volta de JSON para XML, e a codificação dos arquivos
No caminho inverso, as chaves viram elementos, as chaves com arroba viram atributos, #text vira o texto e as listas viram elementos repetidos. Se uma chave não puder ser um nome XML válido (começa com um dígito ou contém um espaço), a ferramenta para e diz qual é, em vez de deformá-la. Os caracteres especiais são escapados tanto no texto quanto nos valores de atributo. Quando você carrega um arquivo que declara uma codificação diferente de UTF-8, ISO-8859-1 por exemplo, o arquivo é lido de novo com essa codificação e o resultado é sempre UTF-8. Tudo roda no navegador, sem nada enviado a um servidor.