CodeKitHub
Instrumente JSON

Convertor JSON ↔ XML

Ultima actualizare:

Pentru a converti JSON în XML, fiecare cheie devine un tag de element, iar fiecare valoare devine conținutul său de text — obiectele imbricate devin elemente imbricate, array-urile devin elemente frate repetate, iar atributele XML se mapează la chei `@_nume` în JSON, astfel încât conversia dus-întors rămâne fără pierderi. Acest instrument face acea conversie, în ambele direcții, complet în browserul tău.

Ce este acest instrument?

XML și JSON sunt ambele formate de date structurate ca arbore, dar apar în locuri diferite: API-urile enterprise moștenite, serviciile SOAP, feed-urile RSS/Atom și multe formate de configurare încă vorbesc XML, în timp ce API-urile REST moderne și codul JavaScript vorbesc aproape exclusiv JSON. Acest instrument traduce între cele două, ca să nu trebuiască să scrii manual niciunul dintre ele când integrezi sisteme vechi și noi.

Conversia este construită direct pe API-ul browserului DOMParser pentru citirea XML-ului, și urmează structura definită de specificația W3C XML 1.0 pentru producerea lui — deci XML-ul pe care îl generează este bine format, iar XML-ul pe care îl acceptă este parsat la fel cum ar fi parsat de un browser sau orice bibliotecă XML conformă cu standardele.

Deoarece XML are concepte pe care JSON nu le are (atribute, conținut mixt text/element, un singur element rădăcină obligatoriu), iar JSON are concepte pe care XML nu le are (array-uri native, boolean-uri, numere), instrumentul folosește o convenție documentată, larg utilizată: un atribut XML `name="value"` devine cheia JSON `"@_name": "value"`, conținutul de text al elementului devine fie valoarea directă de tip șir a elementului (când nu are copii sau atribute), fie o cheie `"#text"` alături de orice atribute, iar elementele frate repetate cu același tag devin un array JSON.

De ce să-l folosești?

  • Bidirecțional — convertește JSON în XML sau XML în JSON de pe același ecran.
  • Gestionează corect imbricarea — obiectele JSON imbricate devin elemente XML imbricate și invers, la orice adâncime.
  • Array-urile se mapează la elemente repetate — un array JSON sub o cheie devine tot atâtea elemente XML frate cu același tag, iar tag-urile XML repetate revin ca array JSON.
  • Atributele XML sunt păstrate — folosind convenția `@_numeAtribut`, deci datele de atribut nu sunt eliminate silențios.
  • Copiere în clipboard sau descărcare ca fișier .json sau .xml.
  • 100% pe partea de client — nimic din ce lipești nu este încărcat nicăieri.

Cum se folosește

  1. Alege o direcție: „XML → JSON” sau „JSON → XML”.
  2. Lipește datele tale în caseta de input.
  3. Dă clic pe „Convertește”.
  4. Revizuiește rezultatul, apoi copiază-l sau dă clic pe „Descarcă” pentru a salva un fișier.

Exemplu

Intrare

{"user":{"name":"Alice","age":30}}

Rezultat

<?xml version="1.0" encoding="UTF-8"?>
<user>
  <name>Alice</name>
  <age>30</age>
</user>

Singura cheie de nivel superior JSON ("user") devine elementul rădăcină XML; dacă JSON-ul are mai multe chei de nivel superior, instrumentul înfășoară totul într-un element <root>, deoarece XML necesită exact o rădăcină.

Sfaturi practice

  • Migrarea unei configurări XML moștenite (precum fișierul vechi de setări al unei aplicații) către un sistem modern bazat pe JSON: lipește XML-ul, convertește și ajustează numele câmpurilor după cum e nevoie.
  • Testarea unui endpoint SOAP sau XML-RPC din JavaScript: convertește payload-ul tău de cerere JSON în XML aici înainte de a-l trimite, sau convertește un răspuns XML înapoi în JSON pentru a-l inspecta ușor.
  • Dacă JSON-ul tău folosește array-uri pentru date pe care XML le-ar reprezenta ca elemente repetate, asigură-te că array-ul este imbricat sub o singură cheie mai întâi (de ex. {"items":{"item":[1,2,3]}}) în loc de un array simplu de nivel superior, deoarece XML nu poate avea mai multe elemente rădăcină.

De ce contează convenția atributului @_

Partea cea mai delicată a conversiei JSON/XML este că elementele XML pot purta două tipuri de date deodată — atribute și conținut copil — în timp ce un obiect JSON simplu are doar chei și valori. Fără o convenție care să le păstreze separate, un convertor naiv fie ar pierde atributele complet, fie le-ar amesteca cu elementele copil într-un mod care nu poate fi convertit înapoi fiabil. Convenția prefixului `@_name` (folosită și de biblioteci larg adoptate în ecosistemul JavaScript) rezolvă asta oferind atributelor o formă de cheie distinctă, fără ambiguitate, deci `<product id="42">Widget</product>` face conversia dus-întors curat ca `{"product":{"@_id":"42","#text":"Widget"}}` în loc să piardă id-ul sau să ghicească greșit care valoare era care.

Întrebări frecvente

Ce se întâmplă cu JSON-ul cu mai multe chei de nivel superior?

XML necesită un singur element rădăcină, deci dacă obiectul JSON are mai multe chei de nivel superior (de ex. {"a":1,"b":2}), output-ul este înfășurat într-un element <root>: <root><a>1</a><b>2</b></root>. Dacă JSON-ul tău are exact o cheie de nivel superior, acea cheie devine direct numele elementului rădăcină.

Cum sunt reprezentate atributele XML în JSON?

Un atribut precum <user id="7"> devine cheia "@_id": "7" în obiectul JSON rezultat. Aceasta este o convenție comună, documentată (folosită de biblioteci precum fast-xml-parser) care păstrează atributele distincte de elementele copil.

Elementele XML repetate devin un array JSON?

Da. Dacă un element are mai mulți copii cu același nume de tag, de ex. <items><item>1</item><item>2</item></items>, convertirea în JSON produce {"items":{"item":["1","2"]}}. Convertirea acelui JSON înapoi în XML reproduce elementele <item> repetate.

Numerele și boolean-urile sunt păstrate la convertirea XML în JSON?

XML nu are un concept nativ de numere sau boolean-uri — totul este text — deci conținutul de text apare ca șir JSON (de ex. "30" în loc de 30). Dacă ai nevoie de tipuri numerice, va trebui să convertești acele câmpuri ulterior.

Datele mele sunt încărcate undeva?

Nu. Parsarea și conversia se întâmplă complet în JavaScript, în browserul tău, folosind API-ul încorporat DOMParser — nimic nu este trimis către un server, deci este sigur de folosit cu fișiere de configurare private sau payload-uri API interne.

Instrumente similare