XML to JSON
XML naar JSON-formaat converteren
XML-invoer
JSON-uitvoer
Wat is XML naar JSON-conversie?
XML naar JSON-conversie is het proces van het omzetten van gegevens uit Extensible Markup Language (XML) naar JavaScript Object Notation (JSON). Beide formaten stellen gestructureerde, hiërarchische gegevens voor, maar gebruiken een andere syntaxis en een ander gegevensmodel. XML gebruikt openings- en sluitingstags met optionele attributen, terwijl JSON sleutel-waardeparen, arrays en primitieve typen gebruikt. XML naar JSON converteren stelt u in staat XML-gegevens te gebruiken in omgevingen waar JSON het native formaat is, zoals JavaScript-runtimes, REST API's en NoSQL-databases.
De conversie is niet altijd één-op-één. XML heeft constructies zonder directe JSON-equivalent: attributen, gemengde inhoud (tekst afgewisseld met onderliggende elementen), verwerkingsinstructies, opmerkingen, CDATA-secties en naamruimtedeclaraties. Verschillende conversiebibliotheken verwerken deze constructies op een andere manier, wat de reden is dat er meerdere conventies bestaan. De meest gebruikelijke aanpak voegt een @-voorvoegsel toe aan attribuutnamen en plaatst tekstinhoud in een #text-veld wanneer er attributen aanwezig zijn op hetzelfde element.
XML naar JSON-conversie is een veelvoorkomende stap bij het migreren van SOAP naar REST, het gebruiken van verouderde enterprise-API's, of het verwerken van overheids- en financiële datafeeds die XML verplichten. In plaats van producenten en consumenten tegelijkertijd te herschrijven, converteren teams de XML-payload op de grenslaag en geven JSON door aan de volgende stap. AWS API Gateway, Apache Camel en MuleSoft ondersteunen dit patroon allemaal van nature.
<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"
}
]
}
}Waarom een online XML naar JSON-converter gebruiken?
Een eenmalig conversiescript schrijven kost tijd, vooral wanneer de XML attributen, naamruimten of herhaalde elementen bevat die JSON-arrays moeten worden. Een browsergebaseerde converter geeft u de JSON-uitvoer in seconden, zodat u de structuur kunt inspecteren en verder kunt gaan.
Toepassingen van XML naar JSON-conversie
XML naar JSON-toewijzingsreferentie
XML en JSON hebben verschillende gegevensmodellen. De tabel hieronder toont hoe elke XML-constructie overeenkomt met zijn JSON-equivalent onder de meest gebruikelijke conventie (@ voor attributen, #text voor tekst naast attributen). Sommige constructies, zoals gemengde inhoud en opmerkingen, hebben geen standaard JSON-representatie.
| XML-constructie | XML-voorbeeld | JSON-equivalent |
|---|---|---|
| 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 naar JSON-conventies vergeleken
Er is geen enkele standaard die bepaalt hoe XML naar JSON wordt omgezet. Drie conventies zijn breed gebruikt, elk met andere afwegingen voor de verwerking van attributen, arraydetectie en tekstbehoud.
Codevoorbeelden
Hieronder staan werkende voorbeelden voor het converteren van XML naar JSON in JavaScript, Python, Go en op de opdrachtregel. Elk voorbeeld verwerkt geneste elementen en herhaalde nevenliggende 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))))
"