Como usar
- Cole o JSON em JSON. Seu único membro de nível superior vira o elemento raiz.
- Use o prefixo @ para atributos, como @id, e #text para o texto de um elemento.
- Escolha um Recuo, ou Sem quebras de linha (minificado) para o XML mais curto.
- Copie o XML, ou baixe-o como converted.xml.
O mapeamento, regra por regra
XML tem elementos e atributos; JSON tem objetos, arrays e valores. O mapeamento une os dois em um sentido. O nível superior é um objeto com um membro: o nome dele é o elemento raiz. Um objeto vira um elemento. Um membro cujo nome começa com @ vira um atributo, e um membro chamado #text vira o texto do elemento. Qualquer outro membro vira um elemento filho com esse nome.
Um array gera um elemento filho por item, todos com o nome do array, então uma lista de livros é escrita como elementos book repetidos. Um texto, um número, ou true ou false, vira texto. null e um objeto vazio viram um elemento vazio. Um array vazio não tem forma em XML e fica de fora.
- Um nome precisa ser um nome XML: uma chave como first name, com espaço, não pode ser usada como nome de elemento.
- Um array dentro de um array é recusado, porque não há nome de elemento para dar aos seus itens.
- O texto de um número é escrito como o JavaScript o escreve, então um número com mais de 15 ou 16 dígitos significativos pode perder dígitos, como na leitura de JSON.
O que o mapeamento não consegue manter
XML não tem tipos, então a diferença entre o número 12 e o texto “12” se perde na volta; o conversor de XML para JSON lê como número um texto que parece número, a menos que a tipagem seja desligada. Um objeto vazio e null parecem iguais em XML, e um array com um item volta como esse item. Esses são os limites do mapeamento, não erros da ferramenta.
Comentários e instruções de processamento não são escritos, porque o JSON não tem onde guardá-los. Um texto dentro de um elemento recebe escape, então &, < e > continuam como texto no XML.
Exemplo resolvido: o catálogo padrão
O JSON padrão tem um membro, catalog. Seu @version vira o atributo version do elemento catalog, e seu array book vira dois elementos book. Cada livro usa o seu @id como atributo id, e as chaves title, price e inStock viram elementos filhos. O price null do segundo livro vira o elemento vazio price.
Com dois espaços e a declaração, a saída tem oito elementos: o catalog, dois books, e três filhos do primeiro book e dois do segundo. A contagem mostra 8.
Perguntas frequentes
Como escrevo um atributo em JSON?
Dê à chave um prefixo @. O membro "@id": "1" vira id="1" no elemento que o contém. Os valores de atributo devem ser texto, número, ou true ou false, não objetos nem arrays.
Por que meu array vira vários elementos com o mesmo nome?
XML não tem array. Cada item do array vira um elemento com o nome do array, na mesma ordem, que é a forma usual de o XML listar coisas repetidas, como livros ou itens.
Por que recebo um erro sobre o nível superior?
O XML precisa de exatamente um elemento raiz. O JSON deve ser um objeto com um membro, como {"catalog": {...}}; uma lista ou vários membros no nível superior não podem formar um documento.
Por que uma chave com espaço é recusada?
Nomes de elemento em XML não podem conter espaços. Renomeie a chave, por exemplo para first-name ou firstName, antes de converter.
Meu JSON é enviado para algum servidor?
Não. A conversão roda no seu navegador. Nada do que você cola é enviado para o nosso servidor ou guardado lá.
Fontes
- RFC 8259 (em inglês): The JavaScript Object Notation (JSON) Data Interchange Format
- W3C (em inglês): Extensible Markup Language (XML) 1.0, Fifth Edition
Números e texto verificados pela última vez em terça-feira, 10 de novembro de 2026.