XML to JSON
Konvertera XML till JSON-format
XML-indata
JSON-utdata
Vad är XML till JSON-konvertering?
XML till JSON-konvertering är processen att omvandla data från Extensible Markup Language (XML) till JavaScript Object Notation (JSON). Båda formaten representerar strukturerad, hierarkisk data, men de använder olika syntax och datamodeller. XML använder öppnings- och stängningstaggar med valfria attribut, medan JSON använder nyckel-värdepar, arrayer och primitiva typer. Att konvertera XML till JSON låter dig arbeta med XML-data i miljöer där JSON är det naturliga formatet, till exempel JavaScript-körtider, REST API:er och NoSQL-databaser.
Konverteringen är inte alltid en-till-en. XML har konstruktioner utan direkt JSON-motsvarighet: attribut, blandat innehåll (text blandat med underordnade element), bearbetningsinstruktioner, kommentarer, CDATA-avsnitt och namnrymdsdeklarationer. Olika konverteringsbibliotek hanterar dessa konstruktioner på olika sätt, vilket är anledningen till att flera konventioner finns. Det vanligaste tillvägagångssättet är att prefixa attributnamn med @ och placera textinnehåll i ett #text-fält när attribut förekommer på samma element.
XML till JSON-konvertering är ett vanligt steg vid migrering från SOAP till REST, konsumtion av äldre enterprise-API:er eller bearbetning av myndighets- och finansiella dataflöden som kräver XML. Istället för att skriva om producenter och konsumenter samtidigt konverterar team XML-nyttolasten vid gränslagret och skickar JSON vidare. AWS API Gateway, Apache Camel och MuleSoft stödjer alla detta mönster inbyggt.
<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"
}
]
}
}Varför använda en online-XML till JSON-konverterare?
Att skriva ett engångsskript för konvertering tar tid, särskilt när XML:en innehåller attribut, namnrymder eller upprepade element som behöver bli JSON-arrayer. En webbläsarbaserad konverterare ger dig JSON-utdata på sekunder så att du kan inspektera strukturen och gå vidare.
Användningsfall för XML till JSON
XML till JSON-mappningsreferens
XML och JSON har olika datamodeller. Tabellen nedan visar hur varje XML-konstruktion mappas till sin JSON-motsvarighet under den vanligaste konventionen (@ för attribut, #text för text bredvid attribut). Vissa konstruktioner, som blandat innehåll och kommentarer, har ingen standard-JSON-representation.
| XML-konstruktion | XML-exempel | JSON-motsvarighet |
|---|---|---|
| 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 till JSON-konventioner jämförda
Det finns ingen enskild standard som styr hur XML mappas till JSON. Tre konventioner används i stor utsträckning, var och en med olika avvägningar för attributhantering, arraydetektering och textbevarande.
Kodexempel
Nedan finns fungerande exempel för att konvertera XML till JSON i JavaScript, Python, Go och på kommandoraden. Varje exempel hanterar nästlade element och upprepade syskontaggar.
// 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))))
"