XML na JSON

Konwertuj XML do formatu JSON

Wypróbuj przykład

Wejście XML

Wyjście JSON

Działa lokalnie · Bezpieczne do wklejania sekretów
JSON pojawi się tutaj…

Czym jest konwersja XML na JSON?

Konwersja XML na JSON to proces przekształcania danych z formatu Extensible Markup Language (XML) do JavaScript Object Notation (JSON). Oba formaty reprezentują dane strukturalne i hierarchiczne, lecz używają różnej składni i różnych modeli danych. XML używa tagów otwierających i zamykających z opcjonalnymi atrybutami, natomiast JSON korzysta z par klucz-wartość, tablic i typów prymitywnych. Konwersja XML na JSON pozwala pracować z danymi XML w środowiskach, w których JSON jest formatem natywnym, takich jak środowiska uruchomieniowe JavaScript, REST API i bazy danych NoSQL.

Konwersja nie zawsze jest odwzorowaniem jeden do jednego. XML posiada konstrukcje niemające bezpośredniego odpowiednika w JSON: atrybuty, treść mieszaną (tekst przeplatany elementami potomnymi), instrukcje przetwarzania, komentarze, sekcje CDATA i deklaracje przestrzeni nazw. Różne biblioteki konwersji obsługują te konstrukcje w różny sposób, dlatego istnieje wiele konwencji. Najczęstszy sposób polega na poprzedzaniu nazw atrybutów symbolem @ i umieszczaniu treści tekstowej w polu #text, gdy ten sam element zawiera jednocześnie atrybuty.

Konwersja XML na JSON jest powszechnym krokiem przy migracji z SOAP na REST, korzystaniu z przestarzałych enterprise API lub przetwarzaniu rządowych i finansowych strumieni danych wymagających formatu XML. Zamiast jednoczesnego przepisywania producentów i konsumentów, zespoły konwertują ładunek XML na granicy warstw i przekazują JSON dalej. AWS API Gateway, Apache Camel i MuleSoft obsługują ten wzorzec natywnie.

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

Dlaczego warto używać internetowego konwertera XML na JSON?

Pisanie jednorazowego skryptu konwersji zajmuje czas, szczególnie gdy XML zawiera atrybuty, przestrzenie nazw lub powtarzające się elementy, które muszą stać się tablicami JSON. Konwerter działający w przeglądarce zwraca wynik w JSON w ciągu sekund, dzięki czemu możesz sprawdzić strukturę i przejść dalej.

Natychmiastowa konwersja
Wklej XML i natychmiast otrzymaj wyjście JSON. Bez potrzeby instalowania biblioteki, pisania skryptu ani konfigurowania narzędzi kompilacji.
🔒
Przetwarzanie z priorytetem prywatności
Cała konwersja odbywa się w przeglądarce przy użyciu JavaScript. Twoje dane XML nigdy nie opuszczają urządzenia i nie są przesyłane na żaden serwer.
🔀
Obsługa atrybutów i tablic
Atrybuty są mapowane na klucze poprzedzone @. Powtarzające się elementy rodzeństwa są automatycznie grupowane w tablice JSON zgodnie z konwencją Parker lub BadgerFish.
📋
Bez konta
Otwórz stronę, wklej XML i skopiuj wynik JSON. Bez rejestracji, klucza API ani limitów użycia.

Zastosowania konwertera XML na JSON

Programowanie frontendowe
Konwertuj odpowiedzi XML z API na JSON, aby renderować dane w komponentach React, Vue lub Angular bez dodawania biblioteki do parsowania XML do pakietu klienta.
Programowanie backendowe
Przekształcaj ładunki SOAP, kanały RSS/Atom lub odpowiedzi XML-RPC na JSON na warstwie API gateway przed przekazaniem danych do mikroserwisów oczekujących formatu JSON.
DevOps i CI/CD
Konwertuj raporty testów XML (JUnit, NUnit, xUnit) na JSON w celu ich przyjęcia przez pulpity nawigacyjne, boty Slack lub własne potoki powiadomień CI.
QA i testowanie
Porównuj przekonwertowane migawki JSON z oczekiwanym wyjściem, aby zweryfikować, czy serwis generujący XML nie zmienił struktury odpowiedzi między wersjami.
Inżynieria danych
Konwertuj eksporty XML z portali rządowych, strumieni finansowych (FIX, FIXML) lub systemów ochrony zdrowia (HL7 CDA) na JSON w celu załadowania do BigQuery, Snowflake lub Elasticsearch.
Nauka formatów danych
Studenci poznający wymianę danych mogą wklejać próbki XML do konwertera, aby zobaczyć, jak dokładnie elementy, atrybuty i zagnieżdżenia mapują się na klucze, obiekty i tablice JSON.

Tabela odwzorowania XML na JSON

XML i JSON mają różne modele danych. Poniższa tabela pokazuje, jak każda konstrukcja XML mapuje się na odpowiednik JSON zgodnie z najpowszechniejszą konwencją (@ dla atrybutów, #text dla tekstu obok atrybutów). Niektóre konstrukcje, takie jak treść mieszana i komentarze, nie mają standardowej reprezentacji w JSON.

Konstrukcja XMLPrzykład XMLOdpowiednik 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)

Porównanie konwencji XML na JSON

Nie istnieje jeden standard regulujący sposób mapowania XML na JSON. Szeroko stosowane są trzy konwencje, z których każda ma inne zalety i wady w zakresie obsługi atrybutów, wykrywania tablic i zachowania tekstu.

BadgerFish
Każdy węzeł tekstowy trafia do klucza $. Atrybuty otrzymują klucze poprzedzone @. Przestrzenie nazw są zachowywane jako wpisy @xmlns. Szczegółowy, lecz bezstratny: możliwy pełny powrót do XML bez utraty danych.
Parker
Całkowicie usuwa atrybuty i konwertuje elementy zawierające tylko tekst na czyste wartości. Powtarzające się elementy stają się tablicami. Zwięzły i przejrzysty, ale destrukcyjny: atrybuty i informacje o przestrzeni nazw są odrzucane.
GData (Google Data)
Używa $t dla treści tekstowej i zachowuje atrybuty jako klucze najwyższego poziomu bez prefiksu. Stanowi kompromis między szczegółowością BadgerFish a prostotą Parker. Stosowany historycznie w Google API.

Przykłady kodu

Poniżej znajdują się działające przykłady konwersji XML na JSON w JavaScript, Python, Go i wierszu poleceń. Każdy przykład obsługuje zagnieżdżone elementy i powtarzające się tagi rodzeństwa.

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

Często zadawane pytania

Czy konwersja XML na JSON jest bezstratna?
Nie zawsze. Atrybuty XML, komentarze, instrukcje przetwarzania i deklaracje przestrzeni nazw nie mają bezpośredniego odpowiednika w JSON. Większość konwerterów zachowuje atrybuty przy użyciu konwencji z prefiksem @, jednak komentarze i instrukcje przetwarzania są odrzucane. Jeśli potrzebujesz w pełni odwracalnego przetwarzania, użyj bezstratnej konwencji, takiej jak BadgerFish.
Jak atrybuty XML są reprezentowane w JSON?
Najczęstszym podejściem jest poprzedzanie nazw atrybutów symbolem @. Na przykład <book id="1"> staje się {"@id": "1"}. Niektóre konwertery używają zamiast tego zagnieżdżonego obiektu "_attributes". Konkretna konwencja zależy od używanej biblioteki.
Jak konwerter obsługuje powtarzające się elementy XML?
Gdy element pojawia się więcej niż raz pod tym samym elementem nadrzędnym, konwerter grupuje go w tablicę JSON. Na przykład dwa elementy rodzeństwa item stają się {"item": ["a", "b"]}. Pojedynczy element item pozostaje jako zwykła wartość tekstowa, chyba że włączony jest tryb wymuszania tablic.
Czy mogę z powrotem przekonwertować JSON na XML?
Tak, lecz wynik zależy od konwencji użytej podczas pierwotnej konwersji. Jeśli atrybuty były zachowane z prefiksem @, konwerter JSON na XML może je odtworzyć. Jeśli pierwotna konwersja używała Parker (która usuwa atrybuty), te informacje są bezpowrotnie utracone. ToolDeck posiada również narzędzie JSON na XML do operacji odwrotnej.
Co dzieje się z przestrzeniami nazw XML podczas konwersji?
Obsługa przestrzeni nazw zależy od biblioteki. Niektóre konwertery zachowują prefiks w nazwie klucza (np. "ns:element"), inne mapują deklaracje xmlns na oddzielne pola, a niektóre całkowicie usuwają przestrzenie nazw. Sprawdź wyjście dla konkretnego XML, aby zweryfikować zachowanie przestrzeni nazw.
Czy istnieje standard konwersji XML na JSON?
Nie istnieje formalny standard W3C ani IETF. Najbliższe odniesienia to konwencja BadgerFish, konwencja Parker i mapowanie OASIS XSLT-to-JSON. W praktyce każda biblioteka implementuje własne reguły, dlatego ten sam XML może dawać nieco różny JSON w różnych narzędziach.
Jak obsługiwać duże pliki XML?
Konwertery działające w przeglądarce sprawdzają się dobrze dla plików do kilku megabajtów. W przypadku większych plików (10 MB i więcej) użyj parsera strumieniowego, takiego jak iterparse Pythona (xml.etree.ElementTree) lub xml-stream dla Node.js. Przetwarzają one dokument przyrostowo bez ładowania całego drzewa do pamięci.