Vai al contenuto

Conversione JSON ⇄ XML

JSON ⇄ XML

Converte fra JSON e XML con un trattamento configurabile di attributi, array e nodi di testo.

Converte XML in JSON e viceversa. Fra i due non esiste una corrispondenza canonica — XML ha attributi, contenuto misto ordinato e namespace, JSON non ha niente di tutto questo — quindi questa pagina rende esplicite le proprie scelte e permette di cambiarle invece di nascondere una convenzione.

🔒 Funziona interamente nel tuo browserjsonxmlconvert
Direzione

Un attributo diventa `@id`.

Dove finisce il testo proprio di un elemento.

XML

JSON

Fra XML e JSON non c’è una corrispondenza canonica, perciò qui le scelte sono dichiarate: un attributo diventa una chiave come @name e il testo proprio di un elemento finisce in #text, mentre fratelli con lo stesso nome diventano un array. È l’ultimo punto quello in cui l’andata e ritorno può perdere informazione: un elenco che per caso ha un solo elemento torna indietro come un singolo oggetto, a meno che «usa sempre gli array» non sia attivo.

Ingresso

215 caratteri

Uscita

399 caratteri

Come si usa

  1. Scegliere la direzione

    I due lati tengono input separati, così passare avanti e indietro non fa perdere quello che si era incollato.

  2. Impostare il prefisso degli attributi e la chiave del testo

    `@` e `#text` sono la convenzione diffusa (fast-xml-parser, xml2js e altri li usano), ma se il JSON che si deve produrre ne usa altri, si cambiano qui invece di rielaborare l’uscita.

  3. Accendere «sempre array» se il JSON va nel codice

    È la parte della corrispondenza che perde qualcosa: un `<item>` diventa un oggetto, due diventano un array, e il codice che consuma deve gestire entrambi i casi. Forzare gli array rende la forma stabile al prezzo di un po’ di verbosità.

Domande frequenti

Il giro completo mi restituisce il mio XML?

Strutturalmente di solito sì, byte per byte no. I commenti, le processing instruction e la distinzione fra `<a/>` e `<a></a>` non sopravvivono, e il contenuto misto — testo ed elementi alternati — non si può rappresentare in JSON in un modo che ne conservi l’ordine.

Perché `12` è una stringa?

Perché XML non ha tipi: ogni valore in un documento è testo, e solo uno schema dice il contrario. L’interruttore Deduci i tipi tenta di indovinare numeri e booleani, ma è appunto un’ipotesi: un codice prodotto `0123` diventa 123, e una stringa di versione `1.10` diventa 1.1.

Che cosa succede ai namespace?

I prefissi restano parte del nome dell’elemento — `soap:Body` diventa la chiave `soap:Body` — e le dichiarazioni `xmlns` passano come attributi ordinari. Niente viene risolto in un URI di namespace, quindi due documenti che usano prefissi diversi per lo stesso namespace producono JSON diversi.

Si può dargli in pasto una risposta SOAP?

Sì, ed è uno dei motivi comuni per essere qui. La busta, il corpo e il payload arrivano tutti come oggetti annidati; le chiavi `@` sono dove finiscono gli attributi SOAP.

Può ricevere da

Dopo

Questi accettano ciò che produce questo strumento, così il risultato può passare direttamente.