XML to JSON
XML in JSON-Format konvertieren
XML-Eingabe
JSON-Ausgabe
Was ist XML-zu-JSON-Konvertierung?
XML-zu-JSON-Konvertierung ist der Prozess, Daten von Extensible Markup Language (XML) in JavaScript Object Notation (JSON) zu überführen. Beide Formate repräsentieren strukturierte, hierarchische Daten, verwenden jedoch unterschiedliche Syntaxen und Datenmodelle. XML verwendet öffnende und schließende Tags mit optionalen Attributen, während JSON Schlüssel-Wert-Paare, Arrays und primitive Typen einsetzt. Die Konvertierung von XML zu JSON ermöglicht es, XML-Daten in Umgebungen zu verarbeiten, in denen JSON das native Format ist — etwa JavaScript-Runtimes, REST-APIs und NoSQL-Datenbanken.
Die Konvertierung ist nicht immer eins-zu-eins. XML besitzt Konstrukte ohne direkte JSON-Entsprechung: Attribute, gemischten Inhalt (Text, der mit untergeordneten Elementen verwoben ist), Verarbeitungsanweisungen, Kommentare, CDATA-Abschnitte und Namensraumdeklarationen. Verschiedene Konvertierungsbibliotheken behandeln diese Konstrukte unterschiedlich, weshalb mehrere Konventionen existieren. Der verbreitetste Ansatz versieht Attributnamen mit dem Präfix @ und legt Textinhalt in einem #text-Feld ab, wenn Attribute im selben Element vorhanden sind.
Die XML-zu-JSON-Konvertierung ist ein häufiger Schritt bei der Migration von SOAP zu REST, beim Konsumieren älterer Enterprise-APIs oder bei der Verarbeitung von Behörden- und Finanzdaten-Feeds, die XML vorschreiben. Anstatt Produzenten und Konsumenten gleichzeitig umzuschreiben, konvertieren Teams den XML-Payload an der Grenzschicht und reichen JSON weiter. AWS API Gateway, Apache Camel und MuleSoft unterstützen dieses Muster nativ.
<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>{
"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"
}
]
}
}Warum einen Online-XML-zu-JSON-Konverter verwenden?
Ein einmaliges Konvertierungsskript zu schreiben kostet Zeit, besonders wenn das XML Attribute, Namensräume oder wiederholte Elemente enthält, die zu JSON-Arrays werden müssen. Ein browserbasierter Konverter liefert die JSON-Ausgabe in Sekunden, sodass Sie die Struktur prüfen und direkt weiterarbeiten können.
Anwendungsfälle für XML zu JSON
XML-zu-JSON-Mapping-Referenz
XML und JSON haben unterschiedliche Datenmodelle. Die Tabelle unten zeigt, wie jedes XML-Konstrukt nach der verbreitetsten Konvention (@ für Attribute, #text für Text neben Attributen) auf sein JSON-Äquivalent abgebildet wird. Einige Konstrukte wie gemischter Inhalt und Kommentare haben keine standardisierte JSON-Darstellung.
| XML-Konstrukt | XML-Beispiel | JSON-Äquivalent |
|---|---|---|
| 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 |
| Namespaces | xmlns:prefix="uri" | Prefix preserved or stripped |
| Empty element | <el/> | "el": null or "" |
| Comments | <!-- note --> | Discarded (no JSON equivalent) |
XML-zu-JSON-Konventionen im Vergleich
Es gibt keinen einheitlichen Standard, der festlegt, wie XML auf JSON abgebildet wird. Drei Konventionen sind weit verbreitet, jede mit unterschiedlichen Kompromissen bei der Behandlung von Attributen, Array-Erkennung und Texterhaltung.
Code-Beispiele
Nachfolgend finden Sie funktionierende Beispiele für die Konvertierung von XML zu JSON in JavaScript, Python, Go und auf der Kommandozeile. Jedes Beispiel behandelt verschachtelte Elemente und wiederholte Geschwister-Tags.
// 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" }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))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"] }
}# 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))))
"