ToolDeck

XML para JSON

Converte XML para formato JSON

Experimente um exemplo

Entrada XML

Saída JSON

Roda localmente · Seguro para colar segredos
O JSON aparecerá aqui…

O que é Conversão de XML para JSON?

A conversão de XML para JSON é o processo de transformar dados de Extensible Markup Language (XML) para JavaScript Object Notation (JSON). Ambos os formatos representam dados estruturados e hierárquicos, mas usam sintaxe e modelos de dados diferentes. O XML usa tags de abertura e fechamento com atributos opcionais, enquanto o JSON usa pares chave-valor, arrays e tipos primitivos. Converter XML para JSON permite trabalhar com dados XML em ambientes onde JSON é o formato nativo, como runtimes JavaScript, REST APIs e bancos de dados NoSQL.

A conversão nem sempre é um-para-um. O XML possui construções sem equivalente direto em JSON: atributos, conteúdo misto (texto intercalado com elementos filhos), instruções de processamento, comentários, seções CDATA e declarações de namespace. Diferentes bibliotecas de conversão tratam essas construções de formas distintas, razão pela qual existem diversas convenções. A abordagem mais comum prefixa os nomes de atributo com @ e coloca o conteúdo textual em um campo #text quando há atributos presentes no mesmo elemento.

A conversão de XML para JSON é uma etapa comum na migração de SOAP para REST, no consumo de APIs legadas empresariais ou no processamento de feeds de dados governamentais e financeiros que exigem XML. Em vez de reescrever produtores e consumidores simultaneamente, as equipes convertem o payload XML na camada de fronteira e passam JSON adiante. AWS API Gateway, Apache Camel e MuleSoft todos suportam esse padrão nativamente.

XML input
<bookstore>
  <book category="fiction">
    <title lang="en">The Great Gatsby</title>
    <author>F. Scott Fitzgerald</author>
    <year>1925</year>
    <price>10.99</price>
  </book>
  <book category="non-fiction">
    <title lang="en">Sapiens</title>
    <author>Yuval Noah Harari</author>
    <year>2011</year>
    <price>14.99</price>
  </book>
</bookstore>
JSON output
{
  "bookstore": {
    "book": [
      {
        "@category": "fiction",
        "title": {
          "@lang": "en",
          "#text": "The Great Gatsby"
        },
        "author": "F. Scott Fitzgerald",
        "year": "1925",
        "price": "10.99"
      },
      {
        "@category": "non-fiction",
        "title": {
          "@lang": "en",
          "#text": "Sapiens"
        },
        "author": "Yuval Noah Harari",
        "year": "2011",
        "price": "14.99"
      }
    ]
  }
}

Por que Usar um Conversor de XML para JSON Online?

Escrever um script de conversão pontual leva tempo, especialmente quando o XML contém atributos, namespaces ou elementos repetidos que precisam se tornar arrays JSON. Um conversor no navegador entrega a saída JSON em segundos, para que você possa inspecionar a estrutura e seguir em frente.

Conversão instantânea
Cole o XML e obtenha a saída JSON imediatamente. Sem necessidade de instalar uma biblioteca, escrever um script ou configurar uma ferramenta de build.
🔒
Processamento com privacidade em primeiro lugar
Toda a conversão é executada no seu navegador via JavaScript. Seus dados XML nunca saem da sua máquina e nunca são enviados a nenhum servidor.
🔀
Lida com atributos e arrays
Os atributos são mapeados para chaves com prefixo @. Elementos irmãos repetidos são agrupados automaticamente em arrays JSON, seguindo a convenção Parker ou BadgerFish.
📋
Sem conta necessária
Abra a página, cole seu XML e copie o resultado JSON. Sem cadastro, sem chave de API, sem limites de uso.

Casos de Uso da Conversão XML para JSON

Desenvolvimento frontend
Converta respostas de APIs XML em JSON para renderizar dados em componentes React, Vue ou Angular sem adicionar uma biblioteca de parsing XML ao seu bundle cliente.
Engenharia backend
Transforme payloads SOAP, feeds RSS/Atom ou respostas XML-RPC em JSON na camada de API gateway antes de passar os dados para microsserviços que esperam entrada JSON.
DevOps e CI/CD
Converta relatórios de teste XML (JUnit, NUnit, xUnit) em JSON para ingestão por dashboards, bots do Slack ou pipelines personalizados de notificação de CI.
QA e testes
Compare snapshots JSON convertidos com a saída esperada para verificar que um serviço produtor de XML não alterou sua estrutura de resposta entre versões.
Engenharia de dados
Converta exportações XML de portais governamentais, feeds financeiros (FIX, FIXML) ou sistemas de saúde (HL7 CDA) em JSON para carregamento no BigQuery, Snowflake ou Elasticsearch.
Aprendendo formatos de dados
Estudantes que estudam intercâmbio de dados podem colar exemplos XML no conversor para ver exatamente como elementos, atributos e aninhamento mapeiam para chaves, objetos e arrays JSON.

Referência de Mapeamento XML para JSON

XML e JSON possuem modelos de dados diferentes. A tabela abaixo mostra como cada construção XML mapeia para seu equivalente JSON sob a convenção mais comum (@ para atributos, #text para texto junto com atributos). Algumas construções, como conteúdo misto e comentários, não possuem representação JSON padrão.

Construção XMLExemplo XMLEquivalente JSON
Element<name>text</name>"name": "text"
Nested elements<a><b>1</b></a>"a": { "b": "1" }
Attributes<el attr="v"/>"el": { "@attr": "v" }
Text + attributes<el a="1">text</el>"el": { "@a": "1", "#text": "text" }
Repeated elements<r><i>1</i><i>2</i></r>"r": { "i": ["1", "2"] }
Mixed content<p>A <b>B</b> C</p>Varies by convention
CDATA<![CDATA[raw]]>"#cdata": "raw" or flattened
Namespacesxmlns:prefix="uri"Prefix preserved or stripped
Empty element<el/>"el": null or ""
Comments<!-- note -->Discarded (no JSON equivalent)

Convenções de XML para JSON Comparadas

Não existe um padrão único que governe como o XML mapeia para JSON. Três convenções são amplamente usadas, cada uma com diferentes trade-offs para tratamento de atributos, detecção de arrays e preservação de texto.

BadgerFish
Todo nó de texto vai para uma chave $. Os atributos recebem chaves com prefixo @. Namespaces são preservados como entradas @xmlns. Verboso, mas sem perdas: é possível fazer o round-trip de volta ao XML sem perder dados.
Parker
Elimina atributos completamente e converte elementos apenas de texto em valores simples. Elementos repetidos se tornam arrays. Compacto e limpo, mas destrutivo: atributos e informações de namespace são descartados.
GData (Google Data)
Usa $t para o conteúdo textual e preserva atributos como chaves de nível superior sem prefixo. Um meio-termo entre a verbosidade do BadgerFish e a simplicidade do Parker. Usado historicamente nas APIs do Google.

Exemplos de Código

Abaixo estão exemplos funcionais para converter XML para JSON em JavaScript, Python, Go e na linha de comando. Cada exemplo lida com elementos aninhados e tags irmãs repetidas.

JavaScript (browser)
// Using the DOMParser API to walk XML and build a JSON object
function xmlToJson(xml) {
  const parser = new DOMParser()
  const doc = parser.parseFromString(xml, 'application/xml')

  function nodeToObj(node) {
    const obj = {}
    // Handle attributes
    if (node.attributes) {
      for (const attr of node.attributes) {
        obj['@' + attr.name] = attr.value
      }
    }
    // Handle child nodes
    for (const child of node.childNodes) {
      if (child.nodeType === 3) { // text
        const text = child.textContent.trim()
        if (text) obj['#text'] = text
      } else if (child.nodeType === 1) { // element
        const key = child.nodeName
        const val = nodeToObj(child)
        if (obj[key]) {
          if (!Array.isArray(obj[key])) obj[key] = [obj[key]]
          obj[key].push(val)
        } else {
          obj[key] = val
        }
      }
    }
    // Simplify text-only nodes
    const keys = Object.keys(obj)
    if (keys.length === 1 && keys[0] === '#text') return obj['#text']
    return obj
  }

  return nodeToObj(doc.documentElement)
}

const xml = '<user><name>Alice</name><role>admin</role></user>'
console.log(JSON.stringify(xmlToJson(xml), null, 2))
// → { "name": "Alice", "role": "admin" }
Python
import xmltodict
import json

xml = """
<user>
  <name>Alice</name>
  <roles>
    <role>admin</role>
    <role>editor</role>
  </roles>
</user>
"""

# xmltodict converts XML to an OrderedDict
result = xmltodict.parse(xml)
print(json.dumps(result, indent=2))
# → {
# →   "user": {
# →     "name": "Alice",
# →     "roles": { "role": ["admin", "editor"] }
# →   }
# → }

# With the standard library (xml.etree.ElementTree)
import xml.etree.ElementTree as ET

def etree_to_dict(elem):
    d = {}
    if elem.attrib:
        d.update({f"@{k}": v for k, v in elem.attrib.items()})
    for child in elem:
        child_data = etree_to_dict(child)
        if child.tag in d:
            if not isinstance(d[child.tag], list):
                d[child.tag] = [d[child.tag]]
            d[child.tag].append(child_data)
        else:
            d[child.tag] = child_data
    if elem.text and elem.text.strip():
        if d:
            d["#text"] = elem.text.strip()
        else:
            return elem.text.strip()
    return d

root = ET.fromstring(xml)
print(json.dumps(etree_to_dict(root), indent=2))
Go
package main

import (
    "encoding/json"
    "encoding/xml"
    "fmt"
    "strings"
)

// For simple, known schemas — define a struct
type User struct {
    XMLName xml.Name `xml:"user"`
    Name    string   `xml:"name"`
    Roles   []string `xml:"roles>role"`
}

func main() {
    data := `<user><name>Alice</name><roles><role>admin</role><role>editor</role></roles></user>`
    var user User
    xml.NewDecoder(strings.NewReader(data)).Decode(&user)

    out, _ := json.MarshalIndent(user, "", "  ")
    fmt.Println(string(out))
    // → { "Name": "Alice", "Roles": ["admin", "editor"] }
}
CLI (xmllint + jq / yq)
# Using xq (part of yq, a jq wrapper for XML)
# Install: pip install yq  OR  brew install yq
echo '<user><name>Alice</name></user>' | xq .
# → { "user": { "name": "Alice" } }

# Using xmlstarlet + jq
xmlstarlet sel -t -v '//name' input.xml | jq -R '{ name: . }'

# Node.js one-liner with xml2js
echo '<a><b>1</b></a>' | node -e "
  const {parseString} = require('xml2js');
  let d=''; process.stdin.on('data',c=>d+=c);
  process.stdin.on('end',()=>parseString(d,(e,r)=>console.log(JSON.stringify(r,null,2))))
"

Perguntas Frequentes

A conversão de XML para JSON é sem perdas?
Nem sempre. Atributos XML, comentários, instruções de processamento e declarações de namespace não possuem equivalente direto em JSON. A maioria dos conversores preserva atributos usando a convenção de prefixo @, mas comentários e instruções de processamento são descartados. Se você precisar de um round-trip totalmente reversível, use uma convenção sem perdas como BadgerFish.
Como os atributos XML são representados em JSON?
A abordagem mais comum é prefixar os nomes de atributo com @. Por exemplo, <book id="1"> torna-se {"@id": "1"}. Alguns conversores usam um objeto "_attributes" aninhado. A convenção específica depende da biblioteca utilizada.
Como o conversor lida com elementos XML repetidos?
Quando um elemento aparece mais de uma vez sob o mesmo pai, o conversor os agrupa em um array JSON. Por exemplo, dois elementos irmãos item tornam-se {"item": ["a", "b"]}. Um único elemento item permanece como valor string simples, a menos que o modo force-array esteja ativado.
Posso converter JSON de volta para XML?
Sim, mas o resultado depende da convenção usada durante a conversão original. Se os atributos foram preservados com prefixos @, um conversor JSON para XML pode reconstruí-los. Se a conversão original usou Parker (que descarta atributos), essa informação é perdida. O ToolDeck também possui uma ferramenta JSON para XML para a direção inversa.
O que acontece com namespaces XML durante a conversão?
O tratamento de namespaces varia conforme a biblioteca. Alguns conversores preservam o prefixo no nome da chave (ex.: "ns:element"), outros mapeiam declarações xmlns para campos separados, e alguns removem namespaces completamente. Verifique a saída do seu XML específico para confirmar o comportamento dos namespaces.
Existe um padrão para conversão de XML para JSON?
Não existe um padrão formal W3C ou IETF. As referências mais próximas são a convenção BadgerFish, a convenção Parker e o mapeamento XSLT-to-JSON da OASIS. Na prática, cada biblioteca implementa suas próprias regras, razão pela qual o mesmo XML pode produzir JSON ligeiramente diferente em ferramentas distintas.
Como lidar com arquivos XML grandes?
Conversores no navegador funcionam bem para arquivos de até alguns megabytes. Para arquivos maiores (10 MB+), use um parser de streaming como iterparse do Python (xml.etree.ElementTree) ou xml-stream do Node.js. Esses processam o documento de forma incremental sem carregar toda a árvore na memória.