Converta JSON em XML ou XML em JSON na página: chaves viram elementos, chaves - viram atributos, elementos repetidos voltam como arrays e a entrada que não pode ser analisada é avisada com a posição onde o analisador parou, em vez de gerar um resultado quebrado.
Funciona localmente no seu navegadorJSON para XML transforma um objeto ou array JSON em um documento XML; XML para JSON lê um documento XML como JSON. As duas direções rodam na página, então nada do que você cola é enviado, e o resultado aparece no painel abaixo dos botões.
Os dois botões de exemplo carregam o mesmo catálogo pequeno nos dois formatos: convertendo o exemplo JSON você obtém o exemplo XML, e convertendo esse exemplo XML de volta você recebe o exemplo JSON.
O documento recebe exatamente um elemento raiz. Uma única chave de nível superior se torna esse elemento — {"user":{"name":"Ann"}} é escrito como <user><name>Ann</name></user> —, enquanto várias chaves, um array de nível superior e uma única chave que contém um array são envolvidos em <root>; itens de array sem nome próprio são escritos como <item>.
Dentro de um elemento, uma chave se torna um elemento filho e um array repete o seu elemento uma vez por item. Uma chave que começa com - vira um atributo e #text vira o texto do elemento, então {"a":{"-x":"1","#text":"hi"}} é escrito como <a x="1">hi</a>, a mesma forma que a direção XML para JSON produz, o que permite encadear as duas direções. null e "" viram <name />.
Os nomes são corrigidos em vez de saírem quebrados: espaço, < ou & em uma chave, ou uma chave que começa com dígito, é escrito com underline, e a linha de status informa quantos nomes foram alterados. Marcação dentro de um valor é escapada, e aspas, quebras de linha e tabulações em um valor de atributo são escritas como ", e 	 para o documento continuar bem formado.
Os atributos voltam com o prefixo -, um elemento que só tem texto vira uma string, um elemento com filhos vira um objeto e um nome que aparece mais de uma vez vira um array: <r><i>1</i><i>2</i></r> vira {"r":{"i":["1","2"]}}, enquanto um único <i> continua string. O XML não tem tipos, então os valores chegam como strings: 24.90 em XML é "24.90" em JSON.
Um elemento sem conteúdo vira uma string vazia, o texto dentro de um elemento é mantido exatamente como foi escrito, espaços e quebras de linha incluídos, e a identação entre elementos é ignorada. Comentários são ignorados, seções CDATA são lidas como texto e o texto que divide um elemento com elementos filhos é reunido em uma chave #text.
A conversão roda na página: com a rede bloqueada ela continua funcionando e não envia nenhuma requisição, então um documento que não pode sair da sua máquina pode ser convertido aqui. Resultados de até 120.000 caracteres recebem realce de sintaxe e os maiores são mostrados como texto simples: 1.000 linhas (45 KB de JSON para 99 KB de XML) levam cerca de 0,8 segundo com realce, enquanto 5.000 linhas (233 KB para 503 KB, e de volta para 618 KB de JSON) levam cerca de 0,2 segundo no total, medido no Chrome nesta página.
É um conversor de formato, não uma ferramenta de esquema: não há validação XSD nem DTD, não há tratamento de namespaces (dois-pontos em um nome é escrito como underline) e não há inferência de tipos. Um documento aninhado milhares de níveis é recusado com uma mensagem, em vez de deixar um documento pela metade na tela.