ToolDeck

XML in JSON

Converti XML in formato JSON

Prova un esempio

Input XML

Output JSON

Esegue in locale · Sicuro per incollare segreti
Il JSON apparirà qui…

Cos'è la conversione da XML a JSON?

La conversione da XML a JSON è il processo di trasformazione dei dati da Extensible Markup Language (XML) a JavaScript Object Notation (JSON). Entrambi i formati rappresentano dati strutturati e gerarchici, ma utilizzano sintassi e modelli di dati diversi. XML usa tag di apertura e chiusura con attributi opzionali, mentre JSON usa coppie chiave-valore, array e tipi primitivi. Convertire XML in JSON consente di lavorare con i dati XML in ambienti dove JSON è il formato nativo, come i runtime JavaScript, le REST API e i database NoSQL.

La conversione non è sempre uno-a-uno. XML ha costrutti senza un equivalente diretto in JSON: attributi, contenuto misto (testo intercalato a elementi figli), istruzioni di elaborazione, commenti, sezioni CDATA e dichiarazioni di namespace. Le diverse librerie di conversione gestiscono questi costrutti in modo differente, motivo per cui esistono più convenzioni. L'approccio più comune prefissa i nomi degli attributi con @ e inserisce il contenuto testuale in un campo #text quando sullo stesso elemento sono presenti anche attributi.

La conversione da XML a JSON è un passaggio comune quando si migra da SOAP a REST, si consumano API enterprise legacy o si elaborano feed di dati governativi e finanziari che richiedono XML. Invece di riscrivere produttori e consumatori contemporaneamente, i team convertono il payload XML al livello di confine e passano il JSON a valle. AWS API Gateway, Apache Camel e MuleSoft supportano tutti questo pattern in modo nativo.

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"
      }
    ]
  }
}

Perché usare un convertitore XML in JSON online?

Scrivere uno script di conversione una tantum richiede tempo, soprattutto quando l'XML contiene attributi, namespace o elementi ripetuti che devono diventare array JSON. Un convertitore basato su browser restituisce l'output JSON in pochi secondi, consentendo di ispezionare la struttura e procedere.

Conversione istantanea
Incolla l'XML e ottieni subito l'output JSON. Non è necessario installare una libreria, scrivere uno script o configurare uno strumento di build.
🔒
Elaborazione privacy-first
L'intera conversione viene eseguita nel browser tramite JavaScript. I tuoi dati XML non lasciano mai la tua macchina e non vengono mai inviati a nessun server.
🔀
Gestisce attributi e array
Gli attributi vengono mappati su chiavi con prefisso @. Gli elementi fratelli ripetuti vengono raggruppati automaticamente in array JSON, seguendo la convenzione Parker o BadgerFish.
📋
Nessun account richiesto
Apri la pagina, incolla il tuo XML e copia il risultato JSON. Nessuna registrazione, nessuna chiave API, nessun limite di utilizzo.

Casi d'uso della conversione XML in JSON

Sviluppo frontend
Converti le risposte XML delle API in JSON per visualizzare i dati in componenti React, Vue o Angular senza aggiungere una libreria di parsing XML al bundle client.
Ingegneria backend
Trasforma payload SOAP, feed RSS/Atom o risposte XML-RPC in JSON al livello API gateway, prima di passare i dati ai microservizi che si aspettano input in formato JSON.
DevOps e CI/CD
Converti i report di test XML (JUnit, NUnit, xUnit) in JSON per l'ingestione da parte di dashboard, bot Slack o pipeline di notifiche CI personalizzate.
QA e testing
Confronta gli snapshot JSON convertiti con l'output atteso per verificare che un servizio che produce XML non abbia modificato la propria struttura di risposta tra i rilasci.
Ingegneria dei dati
Converti esportazioni XML da portali governativi, feed finanziari (FIX, FIXML) o sistemi sanitari (HL7 CDA) in JSON per il caricamento in BigQuery, Snowflake o Elasticsearch.
Apprendimento dei formati dati
Gli studenti che studiano lo scambio di dati possono incollare esempi XML nel convertitore per vedere esattamente come elementi, attributi e strutture annidate si mappano su chiavi, oggetti e array JSON.

Riferimento alla mappatura XML in JSON

XML e JSON hanno modelli di dati diversi. La tabella seguente mostra come ogni costrutto XML si mappa al proprio equivalente JSON secondo la convenzione più comune (@ per gli attributi, #text per il testo in presenza di attributi). Alcuni costrutti, come il contenuto misto e i commenti, non hanno una rappresentazione JSON standard.

Costrutto XMLEsempio 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)

Confronto tra le convenzioni XML in JSON

Non esiste uno standard unico che regoli la mappatura da XML a JSON. Tre convenzioni sono ampiamente usate, ognuna con diversi compromessi nella gestione degli attributi, nel rilevamento degli array e nella preservazione del testo.

BadgerFish
Ogni nodo di testo va in una chiave $. Gli attributi ottengono chiavi con prefisso @. I namespace vengono preservati come voci @xmlns. Verboso ma senza perdita di dati: è possibile tornare all'XML originale senza perdere informazioni.
Parker
Elimina completamente gli attributi e converte gli elementi con solo testo in valori semplici. Gli elementi ripetuti diventano array. Compatto e pulito, ma distruttivo: gli attributi e le informazioni sui namespace vengono scartate.
GData (Google Data)
Usa $t per il contenuto testuale e preserva gli attributi come chiavi di primo livello senza prefisso. Una via di mezzo tra la verbosità di BadgerFish e la semplicità di Parker. Usato storicamente nelle API Google.

Esempi di codice

Di seguito trovi esempi funzionanti per convertire XML in JSON in JavaScript, Python, Go e da riga di comando. Ogni esempio gestisce elementi annidati e tag fratelli ripetuti.

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))))
"

Domande frequenti

La conversione da XML a JSON è senza perdita di dati?
Non sempre. Attributi XML, commenti, istruzioni di elaborazione e dichiarazioni di namespace non hanno un equivalente diretto in JSON. La maggior parte dei convertitori preserva gli attributi usando la convenzione con prefisso @, ma commenti e istruzioni di elaborazione vengono scartati. Se hai bisogno di un round-trip completamente reversibile, usa una convenzione senza perdita come BadgerFish.
Come vengono rappresentati gli attributi XML in JSON?
xmlToJsonContent.a2
Come gestisce il convertitore gli elementi XML ripetuti?
Quando un elemento compare più di una volta sotto lo stesso genitore, il convertitore li raggruppa in un array JSON. Ad esempio, due elementi fratelli item diventano {'item': ['a', 'b']}. Un singolo elemento item rimane come valore stringa semplice a meno che non sia attiva la modalità force-array.
Posso convertire JSON di nuovo in XML?
Sì, ma il risultato dipende dalla convenzione usata durante la conversione originale. Se gli attributi erano stati preservati con prefissi @, un convertitore da JSON a XML può ricostruirli. Se la conversione originale usava Parker (che elimina gli attributi), quelle informazioni sono perse. ToolDeck ha anche uno strumento JSON in XML per la direzione inversa.
Cosa succede ai namespace XML durante la conversione?
La gestione dei namespace varia a seconda della libreria. Alcuni convertitori preservano il prefisso nel nome della chiave (es. "ns:element"), altri mappano le dichiarazioni xmlns su campi separati, e alcuni eliminano del tutto i namespace. Verifica l'output per il tuo XML specifico per controllare il comportamento dei namespace.
Esiste uno standard per la conversione da XML a JSON?
Non esiste uno standard formale W3C o IETF. I riferimenti più vicini sono la convenzione BadgerFish, la convenzione Parker e la mappatura OASIS XSLT-to-JSON. In pratica, ogni libreria implementa le proprie regole, motivo per cui lo stesso XML può produrre JSON leggermente diverso in strumenti differenti.
Come gestisco file XML di grandi dimensioni?
I convertitori basati su browser funzionano bene per file fino a qualche megabyte. Per file più grandi (10 MB+), usa un parser con streaming come iterparse di Python (xml.etree.ElementTree) o xml-stream di Node.js. Questi elaborano il documento in modo incrementale senza caricare l'intero albero in memoria.