Skip to content

Conversor JSON para XML

Cole JSON e obtenha XML instantaneamente. Converte objetos, arrays e atributos @_ no navegador — nenhum dado enviado. Grátis, privado, sem cadastro.

Sem rastreamento Roda no navegador Grátis
Opções · 2 espaços · JSON → XML
Indentação
0 caracteres
XML Saída
0 linhas
Revisado para boa formação do XML 1.0, correção da convenção @_/#text e precisão da normalização de raiz — Go Tools Engineering Team · May 29, 2026

O que é a Conversão JSON para XML e Como Funciona?

JSON (JavaScript Object Notation) e XML (Extensible Markup Language) são ambos formatos de dados estruturados, mas têm modelos fundamentalmente diferentes: JSON é uma árvore de objetos, arrays, strings, números, booleanos e valores null sem conceito de atributos ou restrições de raiz de documento; XML é uma árvore de elementos que podem carregar atributos e conteúdo de texto, e o documento deve ter exatamente um elemento raiz. A conversão de JSON para XML requer um conjunto de convenções para preencher essa lacuna.

Esta ferramenta usa a convenção mais amplamente adotada — a mesma usada pelo fast-xml-parser (Node.js), xmltodict (Python) e JAXB (Java) — aplicada em sentido inverso:

**1. Normalização de elemento raiz.** A diferença mais importante entre JSON e XML é a restrição de raiz. JSON não tem conceito de raiz; o XML requer exatamente uma. O conversor lida com quatro casos automaticamente. Um objeto de chave única usa essa chave como raiz XML: { "config": {...} } → .... Um objeto de múltiplas chaves envolve em : { "a": 1, "b": 2 } → 12. Um array de nível superior envolve como .... Um valor primitivo envolve como valor.

**2. Prefixo @_ → atributos XML.** Chaves JSON prefixadas com @_ tornam-se atributos XML no elemento envolvente. { "element": { "@_id": "42", "@_class": "primary" } } produz . Esse prefixo é a convenção canônica — nenhum nome de elemento XML válido começa com @, então nunca há colisão com nomes de elementos filhos.

**3. #text → conteúdo de texto do elemento.** Quando um elemento precisa tanto de atributos quanto de conteúdo de texto, o texto é armazenado sob a chave #text: { "price": { "@_currency": "USD", "#text": "29.99" } } → 29.99. Elementos com apenas conteúdo de texto (sem chaves @_) convertem para elementos de texto simples sem essa indireção.

**4. Arrays → elementos irmãos repetidos com o mesmo nome.** O XML permite múltiplos elementos filhos com o mesmo nome; o JSON usa arrays para listas ordenadas. Um array JSON sob uma chave produz elementos filhos repetidos que reutilizam o nome da chave: { "items": ["a", "b"] } produz ab (os dois elementos são irmãos sob o pai). Quando toda a entrada JSON é um array de nível superior, um wrapper é adicionado e cada elemento torna-se um filho é um nome fallback fixo usado apenas nesse caso.

**5. Simétrico com XML para JSON.** As convenções @_ e #text usadas aqui são exatamente as mesmas convenções usadas pelo Conversor XML para JSON complementar. Isso significa que um round-trip JSON → XML → JSON preserva atributos, conteúdo de texto e estrutura de elemento — desde que o JSON de entrada siga as convenções @_/#text.

**Quando converter JSON para XML?** Os cenários mais comuns são: (1) enviar dados para um serviço web SOAP ou baseado em XML legado que requer um corpo de requisição XML; (2) gerar arquivos de configuração XML (Spring, Maven, Ant, recursos Android) a partir de dados JSON; (3) produzir XML de sitemap.xml ou feed RSS a partir de dados de conteúdo JSON; (4) interoperar com sistemas corporativos (ERP, CRM, EDI) que consomem XML; (5) gerar SVG ou outros formatos gráficos baseados em XML programaticamente a partir de dados JSON. Para formatar e validar o XML resultante, use o Formatador XML.

// Convert JSON to XML in Node.js using fast-xml-parser
import { XMLBuilder } from 'fast-xml-parser';

const data = {
  catalog: {
    product: {
      '@_id': 'P01',
      '@_category': 'electronics',
      name: 'Wireless Headphones',
      price: {
        '@_currency': 'USD',
        '#text': '79.99'
      }
    }
  }
};

const builder = new XMLBuilder({
  attributeNamePrefix: '@_',   // @_ keys become XML attributes
  textNodeName: '#text',       // #text key becomes element text content
  ignoreAttributes: false,     // process @_ attribute keys
  format: true,                // pretty-print with indentation
  indentBy: '  ',              // 2-space indent
});

const xml = builder.build(data);
console.log(xml);
// <catalog>
//   <product id="P01" category="electronics">
//     <name>Wireless Headphones</name>
//     <price currency="USD">79.99</price>
//   </product>
// </catalog>

Recursos Principais

Conversão ao Vivo

A saída XML é atualizada instantaneamente conforme você digita ou cola JSON — sem necessidade de botão Converter. Entradas grandes (>200KB) mudam automaticamente para o modo manual para manter o navegador responsivo.

Normalização Automática de Raiz

O XML requer exatamente um elemento raiz. Objetos de chave única usam sua chave como raiz; objetos de múltiplas chaves envolvem em ; arrays de nível superior tornam-se ...; primitivos tornam-se valor — sempre saída XML válida.

Convenção de Atributo @_ e #text

Chaves prefixadas com @_ tornam-se atributos XML; a chave #text torna-se conteúdo de texto do elemento. Isso corresponde à convenção do fast-xml-parser e xmltodict, tornando a saída simétrica com o Conversor XML para JSON complementar.

Array para Elementos Repetidos

Arrays JSON sob uma chave produzem elementos filhos repetidos que reutilizam o nome da chave — sem singularização. { "items": [1, 2, 3] } produz três irmãos . Uma entrada de array de nível superior envolve como ... usando como nome literal fixo.

Privacidade 100% Baseada no Navegador

Toda a conversão é executada localmente no seu navegador usando JavaScript. Seu JSON — incluindo credenciais, configurações internas e payloads sensíveis — nunca é enviado a nenhum servidor, nunca é registrado e nunca é armazenado.

Round-Trip Simétrico com XML para JSON

As convenções @_ e #text são compartilhadas com o Conversor XML para JSON complementar. Um round-trip JSON → XML → JSON preserva fielmente atributos, conteúdo de texto e estrutura aninhada.

Exemplos

Objeto de Resposta de API

{"user":{"id":42,"name":"Alice Kim","email":"alice@example.com","role":"admin","address":{"city":"Seoul","country":"KR"}}}

Um objeto JSON de chave única onde a chave de nível superior torna-se o elemento raiz XML. O objeto address aninhado produz um elemento filho

com filhos e . Como o objeto externo tem exatamente uma chave ("user"), nenhum wrapper é adicionado — "user" em si é a raiz. Números como 42 tornam-se conteúdo de texto verbatim: 42.

Array de Nível Superior

[{"id":1,"name":"Widget A","price":9.99},{"id":2,"name":"Widget B","price":14.99},{"id":3,"name":"Widget C","price":4.49}]

Quando toda a entrada é um array JSON (não envolvido em um objeto), o conversor produz .... Cada elemento do array torna-se um filho — "item" é um nome literal fixo usado exclusivamente para arrays de nível superior. Este é o único caso onde aparece; arrays sob uma chave de objeto reutilizam o nome dessa chave para cada elemento.

Objeto com Atributos e Conteúdo de Texto

{"catalog":{"product":{"@_id":"P01","@_category":"electronics","name":"Wireless Headphones","price":{"@_currency":"USD","#text":"79.99"}}}}

Chaves prefixadas com @_ tornam-se atributos XML no elemento: @_id torna-se id="P01" e @_category torna-se category="electronics" no elemento . A chave #text torna-se o conteúdo de texto do elemento — então o objeto price produz 79.99. Isso faz round-trip corretamente com o conversor XML para JSON, que usa as mesmas convenções @_ e #text.

Como Usar

  1. 1

    Cole seu JSON

    Insira ou cole seus dados JSON no campo de entrada acima. Você também pode clicar em 'Carregar exemplo' para experimentar uma amostra — um objeto de resposta de API, um payload de array ou um objeto usando atributos @_ e #text.

  2. 2

    Veja a Saída XML ao Vivo

    O XML aparece instantaneamente no painel de saída. Objetos de chave única usam sua chave como raiz; objetos de múltiplas chaves envolvem em ; chaves com prefixo @_ tornam-se atributos; arrays tornam-se elementos filhos repetidos. Ajuste a indentação (2 ou 4 espaços) conforme necessário.

  3. 3

    Copie ou Baixe

    Clique em Copiar para pegar o XML para a área de transferência ou em Baixar para salvá-lo como arquivo .xml. Para validar ou reformatar o resultado, cole-o no Formatador XML.

Armadilhas Comuns de Conversão

Objeto de Múltiplas Chaves Recebe Wrapper Inesperado

Se o seu JSON de nível superior tem múltiplas chaves, a saída as envolve todas em . Isso é XML correto (que requer uma única raiz), mas pode não corresponder ao seu esquema alvo. Reformule seu JSON para um objeto de chave única para controlar o nome do elemento raiz.

✗ Incorreto
// Input: { "status": 200, "data": { "id": 1 } }
// Output: <root><status>200</status><data><id>1</id></data></root>
// Root is <root> — may not match your schema
✓ Correto
// Wrap in a named key to control the root element
// Input: { "response": { "status": 200, "data": { "id": 1 } } }
// Output: <response><status>200</status><data><id>1</id></data></response>

Array de Nível Superior Recebe Wrapper

Um array JSON de nível superior não tem nome de elemento, então é envolvido como .... Se você quiser nomes de tag significativos, envolva o array em um objeto nomeado primeiro.

✗ Incorreto
// Input: [{ "id": 1 }, { "id": 2 }]
// Output: <root><item><id>1</id></item><item><id>2</id></item></root>
// Tag names are generic
✓ Correto
// Wrap in a named key for meaningful tag names
// Input: { "products": [{ "id": 1 }, { "id": 2 }] }
// Output: <root><products><id>1</id></products><products><id>2</id></products></root>
// Each array element reuses the key name "products" as its tag

Chaves de Atributo sem o Prefixo @_

Para produzir um atributo XML, a chave JSON deve ser prefixada com @_. Sem o prefixo, a chave é tratada como um elemento filho, não como um atributo.

✗ Incorreto
// Input: { "tag": { "id": "42", "name": "Alice" } }
// Output: <tag><id>42</id><name>Alice</name></tag>  ← id is a child element
✓ Correto
// Use @_ prefix for attributes
// Input: { "tag": { "@_id": "42", "name": "Alice" } }
// Output: <tag id="42"><name>Alice</name></tag>  ← id is an attribute

Elemento com Atributos e Texto — #text Ausente

Se você quiser que um elemento tenha tanto atributos XML quanto conteúdo de texto, você deve usar a chave #text para o texto. Sem ela, o texto não tem onde ir e o elemento ficará vazio ou produzirá um erro.

✗ Incorreto
// Input: { "price": { "@_currency": "USD", "value": "29.99" } }
// Output: <price currency="USD"><value>29.99</value></price>
// Text is a child element, not text content
✓ Correto
// Use #text for element text content
// Input: { "price": { "@_currency": "USD", "#text": "29.99" } }
// Output: <price currency="USD">29.99</price>  ← text content

Chaves JSON com Caracteres Inválidos para XML

Nomes de elementos XML não podem começar com um dígito ou conter espaços, dois pontos (exceto para prefixos de namespace) ou a maioria dos caracteres especiais. Se suas chaves JSON contiverem esses caracteres, o XML de saída será malformado. Renomeie as chaves problemáticas antes de converter ou sanitize-as em uma etapa de pós-processamento.

✗ Incorreto
// JSON key starts with digit — invalid XML element name
// Input: { "1stItem": "value" }
// Output: <1stItem>value</1stItem>  ← invalid XML
✓ Correto
// Use a valid XML element name
// Input: { "firstItem": "value" }
// Output: <firstItem>value</firstItem>  ← valid XML

Caracteres Especiais em Valores Não Escapados

O conteúdo de texto XML não deve conter os caracteres brutos <, >, &, ou " — eles devem ser escapados como <, >, & e ". O conversor escapa automaticamente esses caracteres no conteúdo de texto do elemento e nos valores de atributo. Se o processamento downstream duplicar o escape, verifique se o seu parser XML está consumindo bytes XML brutos em vez de escapar novamente conteúdo já escapado.

✗ Incorreto
// JSON: { "query": "name = 'Alice' & role = 'admin'" }
// Converter outputs: <query>name = 'Alice' &amp; role = 'admin'</query>
// If double-processed: &amp;amp; — consumer is re-escaping
✓ Correto
// Converter output is correct — consume it as XML, not as a raw string
// <query>name = 'Alice' &amp; role = 'admin'</query>
// XML parser decodes to: name = 'Alice' & role = 'admin'

Casos de Uso Comuns

Chamando Serviços Web SOAP e XML Legados
Construa o payload JSON na sua aplicação, converta para XML e faça POST no endpoint SOAP. Isso evita a construção manual de strings XML e permite que você trabalhe com os dados em uma estrutura JSON nativa até o momento em que precisar serializá-los para o serviço legado.
Gerando Arquivos de Configuração XML
Spring, Maven, Ant, Tomcat e Android usam formatos de configuração XML. Gere ou transforme dados de configuração como JSON — mais fácil de comparar e controlar versão — depois converta para XML para implantação.
Produzindo XML de Sitemap e Feed RSS
Sistemas de gerenciamento de conteúdo e geradores de sites estáticos frequentemente armazenam metadados de página como JSON. Converta esses metadados para XML de sitemap.xml ou feed RSS para enviar a mecanismos de busca ou sindicalizar conteúdo para leitores de feed.
Integração de Dados Corporativos (EDI / ERP / CRM)
Sistemas ERP (SAP, Oracle), plataformas CRM e redes EDI comumente trocam dados em XML. Converta exportações JSON de APIs REST modernas para XML para alimentar esses sistemas sem construir um serializador XML personalizado.
Arquivos de Recursos Android
Recursos de string Android, restrições de layout e entradas de manifesto são todos XML. Gere ou atualize arquivos de recursos programaticamente a partir de fontes de dados JSON e converta para o formato XML exigido pelo sistema de build Android.
Geração de SVG e Gráficos Vetoriais
SVG é XML. Construa a estrutura SVG como dados JSON — caminhos, formas, cores, transformações — depois converta para XML para produzir arquivos SVG válidos para web, impressão ou ferramentas de edição vetorial.

Detalhes Técnicos

Análise JSON Compatível com RFC 8259
A entrada JSON é analisada usando o JSON.parse() nativo do navegador, que é totalmente compatível com RFC 8259. Ele fornece mensagens de erro de sintaxe precisas com informações de posição de melhor esforço (linha e coluna) e lida com todos os tipos de dados JSON: strings, números, booleanos, null, arrays e objetos.
Serializador JSON para XML Recursivo Personalizado
Após a análise, um serializador recursivo personalizado percorre a árvore JSON. Chaves de objeto que começam com @_ são emitidas como atributos XML no elemento pai. A chave #text é emitida como conteúdo de texto do elemento. Chaves de objeto simples tornam-se elementos filhos. Valores de array produzem elementos irmãos repetidos com o mesmo nome. Caracteres especiais (<, >, &, ", ') no conteúdo de texto e valores de atributo são escapados para suas referências de entidade XML.
Normalização de Raiz
Como o XML requer exatamente um elemento raiz, o serializador aplica normalização de raiz antes de construir o documento: objetos de chave única usam a chave como raiz; objetos de múltiplas chaves e arrays de nível superior recebem um wrapper sintético . Isso garante que a saída seja sempre XML bem formado independentemente da forma da entrada.
100% Baseado no Navegador — Sem Upload, Sem Servidor
Todo o processamento é executado no mecanismo JavaScript do seu navegador. Nenhum dado é transmitido pela rede em nenhum momento. Entradas maiores que 200KB mudam automaticamente do modo ao vivo para o modo manual (exigindo um clique explícito em Converter) para manter o navegador responsivo durante a serialização pesada.

Melhores Práticas

Controle o Elemento Raiz com um Objeto de Chave Única
A maneira mais limpa de produzir XML significativo é garantir que o seu JSON de nível superior seja um objeto de chave única cuja chave seja o nome do elemento raiz desejado. Envolver dados de múltiplas chaves sob uma chave nomeada lhe dá uma raiz semanticamente significativa em vez do wrapper genérico .
Use @_ e #text para XML com Muitos Atributos
Se o seu esquema XML alvo usa muitos atributos (comum em arquivos de configuração, SVG e envelopes SOAP), reformule seu JSON para usar chaves com prefixo @_ e #text antes de converter. O XML resultante corresponderá ao esquema alvo exatamente sem pós-processamento.
Envolva Arrays em Objetos Nomeados para Nomes de Tag Significativos
Um array de nível superior produz o padrão genérico ..., onde é um nome literal fixo. Envolver o array sob uma chave nomeada — { "products": [...] } — produz elementos repetidos (o nome da chave é reutilizado para cada elemento do array) sob um wrapper . Isso lhe dá um nome de tag com significado no domínio e é quase sempre preferível para XML que será analisado ou validado por um esquema.
Valide a Saída com o Formatador XML
Após a conversão, cole a saída XML no Formatador XML para validar a boa formação, verificar a indentação e identificar quaisquer problemas estruturais antes de enviar o XML para um serviço downstream ou fazer commit no controle de versão.
Sanitize as Chaves JSON Antes de Converter
Nomes de elementos XML devem começar com uma letra ou sublinhado e não podem conter espaços ou a maioria dos caracteres especiais. Se suas chaves JSON vierem de uma fonte externa (nome de coluna de banco de dados, nome de campo de API ou entrada do usuário), audite-as para validade de nome XML antes de converter para evitar saída malformada.

Perguntas Frequentes

Meus dados JSON são enviados a um servidor ao usar esta ferramenta?
Não. Toda a conversão acontece inteiramente no seu navegador usando JavaScript. Seu JSON nunca é transmitido pela rede, nunca é armazenado em nenhum servidor e nunca é registrado ou analisado. Isso torna a ferramenta segura para uso com payloads JSON contendo credenciais de API, configuração de banco de dados, dados internos de serviço ou qualquer outro conteúdo sensível. Você pode verificar isso abrindo a guia Rede do seu navegador — você verá zero requisições disparadas ao colar ou converter JSON.
Como a ferramenta decide qual é o elemento raiz XML?
O XML requer exatamente um elemento raiz; o JSON não tem essa restrição. O conversor aplica estas regras: (1) Um objeto de chave única usa essa chave como nome do elemento raiz — { "user": { ... } } torna-se .... (2) Um objeto de múltiplas chaves (duas ou mais chaves no nível superior) é envolvido em um elemento para que todas as chaves tornem-se filhos de uma única raiz. (3) Um array de nível superior é envolvido como ..., com cada elemento do array tornando-se um filho . (4) Um valor primitivo (string, número, booleano, null) no nível superior torna-se valor. Essas regras garantem que a saída seja sempre XML bem formado com exatamente uma raiz.
Por que um objeto JSON com múltiplas chaves é envolvido em ?
O XML é um formato de documento com um requisito estrito de raiz única — um documento XML válido deve ter exatamente um elemento de nível superior. Objetos JSON podem ter qualquer número de chaves de nível superior, então quando seu JSON tem múltiplas chaves de nível superior (como { "status": 200, "data": {...}, "meta": {...} }), não há uma única chave para usar como raiz. Envolver em é a convenção mais segura e previsível. Se você quiser um nome de elemento raiz diferente, reformule seu JSON para um objeto de chave única antes de converter — por exemplo, { "response": { "status": 200, "data": {...} } }.
Como um array JSON de nível superior converte para XML?
Um array de nível superior é envolvido como ....... Cada elemento do array torna-se um filho — "item" é um nome literal fixo usado apenas para arrays de nível superior. Isso é diferente de arrays aninhados sob uma chave de objeto: se você escrever { "products": [...] }, cada elemento do array torna-se um filho (reutilizando o nome da chave), não . Se você quiser nomes de tag personalizados para um array de nível superior, envolva-o em um objeto nomeado primeiro: { "products": [...] } lhe dá elementos repetidos.
Como converter chaves JSON para atributos XML?
Prefixe a chave com @_ e o conversor a emitirá como um atributo XML em vez de um elemento filho. Por exemplo, { "tag": { "@_id": "42", "@_lang": "en", "#text": "Hello" } } produz Hello. A convenção de prefixo @_ é a mesma usada pelo fast-xml-parser (Node.js) e xmltodict (Python), tornando a saída compatível com round-trip com essas bibliotecas. Esta é também a convenção usada pelo Conversor XML para JSON complementar.
Para que serve a chave #text?
Quando um elemento precisa tanto de atributos XML quanto de conteúdo de texto, você não pode simplesmente mapear o texto para um elemento filho — ele deve ser o próprio nó de texto do elemento. A chave #text no seu JSON torna-se esse conteúdo de texto. Exemplo: { "price": { "@_currency": "USD", "#text": "29.99" } } produz 29.99. Se um objeto tem apenas uma chave #text e nenhuma chave @_, ele ainda produz um elemento de texto simples: { "note": { "#text": "hello" } } torna-se hello.
A indentação afeta a estrutura XML?
Não. A indentação é puramente cosmética — ela muda como o XML é formatado para legibilidade humana, mas não afeta a estrutura do elemento, os valores de atributo ou o conteúdo de texto. Escolha 2 espaços para saída compacta ou 4 espaços para saída mais legível. Ambos produzem XML semanticamente idêntico. A maioria dos parsers XML trata nós de texto somente com espaços em branco entre elementos como espaço em branco ignorável, então XML indentado e minificado são equivalentes para fins de análise.
Como um array JSON aninhado dentro de um objeto converte para XML?
Um valor de array JSON sob uma chave produz elementos filhos repetidos com o mesmo nome, reutilizando o nome da chave para cada elemento. Por exemplo, { "items": [1, 2, 3] } produz três irmãos — não . Da mesma forma, { "products": [{"name":"A"},{"name":"B"}] } produz dois elementos , cada um contendo um filho . O nome da chave é usado como está para cada elemento do array; nenhuma singularização ocorre. O único lugar onde o nome literal aparece é quando toda a entrada JSON é um array de nível superior (veja acima), onde é um nome de wrapper fallback fixo.
Como converter XML de volta para JSON?
Use o Conversor XML para JSON complementar. Ele aplica as mesmas convenções @_ e #text em sentido inverso: atributos XML tornam-se chaves JSON com prefixo @_, conteúdo de texto do elemento pareado com atributos torna-se uma chave #text e elementos irmãos repetidos com o mesmo nome tornam-se um array JSON. As duas ferramentas são simétricas para casos de uso de round-trip.
Posso validar ou formatar a saída XML?
Sim — cole a saída XML no Formatador XML para validar a boa formação, ajustar a indentação ou minificar. O Formatador XML é a ferramenta certa para inspecionar e aprimorar o XML depois que este conversor o produziu.
Existe um limite de tamanho de arquivo para a entrada JSON?
Não há um limite rígido, mas entradas maiores que 200KB mudam automaticamente do modo de conversão ao vivo para o modo manual. No modo manual, um botão Converter aparece e a conversão só é executada quando você clica nele — isso mantém o navegador responsivo durante a serialização pesada. Para arquivos JSON muito grandes (vários megabytes), considere ferramentas de linha de comando para melhor desempenho: node -e "const {XMLBuilder}=require('fast-xml-parser');console.log(new XMLBuilder({attributeNamePrefix:'@_'}).build(JSON.parse(require('fs').readFileSync('in.json','utf8'))))" ou um script Python equivalente com xmltodict.
Quais tipos JSON são suportados?
Todos os seis tipos JSON são suportados. Objetos tornam-se elementos XML com elementos filhos. Arrays tornam-se elementos irmãos repetidos com o mesmo nome. Strings, números, booleanos e null tornam-se conteúdo de texto do elemento. Booleanos e null são serializados como suas representações de string literais: true, false e conteúdo vazio para null. Nenhuma coerção de tipo é aplicada — os números são escritos para o conteúdo de texto XML exatamente como aparecem no JSON, preservando decimais e precisão.

Ferramentas relacionadas

Ver todas as ferramentas →