Pular para o conteúdo

JSON ⇄ XML conversor

JSON ⇄ XML

Converte entre JSON e XML com tratamento configurável de atributos, arrays e nós de texto.

Converte XML em JSON e de volta. Não existe um mapeamento canônico entre os dois — XML tem atributos, conteúdo misto ordenado e namespaces, e JSON não tem nada disso —, então esta página deixa suas escolhas explícitas e permite mudá-las em vez de esconder uma convenção.

🔒 Roda inteiramente no seu navegadorjsonxmlconvert
Direção

Um atributo fica como `@id`.

Onde vai o texto do próprio elemento.

XML

JSON

Não existe um mapeamento canônico entre XML e JSON, então aqui as escolhas ficam explícitas: um atributo vira uma chave como @name e o texto do próprio elemento vai para #text, enquanto irmãos repetidos viram um array. É nesse último ponto que a ida e volta pode perder informação: uma lista que por acaso tem um só elemento volta como um objeto único, a menos que “sempre usar arrays” esteja ligado.

Entrada

215 caracteres

Saída

399 caracteres

Como usar

  1. Escolha a direção

    Os dois lados mantêm entradas separadas, então alternar de um para o outro não perde o que você tinha colado.

  2. Defina o prefixo de atributo e a chave de texto

    `@` e `#text` são a convenção mais difundida (fast-xml-parser, xml2js e outros os usam), mas se o JSON que você precisa produzir usa outra coisa, mude aqui em vez de pós-processar.

  3. Ligue “sempre usar arrays” se o JSON vai para código

    Esta é a parte com perda do mapeamento: um `<item>` vira um objeto, dois viram um array, e o código que consome tem de lidar com os dois casos. Forçar arrays deixa a forma estável ao custo de alguma verbosidade.

Perguntas frequentes

A ida e volta me devolve o meu XML?

Estruturalmente, normalmente sim; byte a byte, não. Comentários, instruções de processamento e a distinção entre `<a/>` e `<a></a>` não sobrevivem, e conteúdo misto — texto e elementos intercalados — não pode ser representado em JSON de um jeito que preserve a ordem.

Por que `12` é uma string?

Porque XML não tem tipos: todo valor em um documento é texto, e só um esquema diz o contrário. A opção Converter tipos vai adivinhar números e booleanos, mas é um palpite: um código de produto `0123` vira 123, e uma string de versão `1.10` vira 1.1.

O que acontece com os namespaces?

Os prefixos são mantidos como parte do nome do elemento — `soap:Body` vira a chave `soap:Body` — e as declarações `xmlns` passam como atributos comuns. Nada é resolvido para um URI de namespace, então dois documentos que usam prefixos diferentes para o mesmo namespace produzem JSON diferente.

Posso dar a ele uma resposta SOAP?

Sim, e essa é uma das razões comuns de estar aqui. O envelope, o corpo e o payload passam todos como objetos aninhados; as chaves `@` são onde os atributos do SOAP vão parar.

Pode receber de

Em seguida

Estas aceitam o que esta ferramenta produz, então o resultado pode ir direto.