JSON to XML
Převod JSON do formátu XML
Vstup JSON
Výstup XML
Co je převod JSON na XML?
JSON (JavaScript Object Notation) a XML (eXtensible Markup Language) jsou dva dominantní formáty pro výměnu dat ve vývoji softwaru. JSON používá páry klíč-hodnota a pole v kompaktní syntaxi, zatímco XML obaluje data do otevíracích a zavíracích tagů s volitelnými atributy. Převod JSON na XML znamená přeložit strukturální prvky JSON — objekty, pole, řetězce, čísla, logické hodnoty a null — do správně formovaného XML dokumentu s odpovídajícím vnořením prvků.
XML zůstává povinným formátem v mnoha podnikových systémech, vládních API, webových službách SOAP a průmyslových standardech jako HL7 (zdravotnictví), FpML (finance) a XBRL (finanční výkaznictví). Pokud vaše aplikace produkuje JSON, ale příjemce na druhém konci očekává XML, konvertor JSON na XML zajistí překlad bez ručního restrukturování. Převod se řídí předvídatelnými pravidly mapování: JSON objekty se stávají XML prvky, položky pole se stávají opakovanými sourozeneckými prvky a primitivní hodnoty se stávají textovými uzly.
Neexistuje žádný RFC ani standard W3C, který by definoval, jak se JSON mapuje na XML. Různé knihovny produkují pro stejný vstup odlišný výstup. Nejběžnější konvence (používaná tímto nástrojem) obalí celý dokument do konfigurovatelného kořenového prvku, každý klíč JSON převede na podřízený XML prvek a položky pole reprezentuje jako opakované prvky se stejným názvem tagu. Tato pravidla mapování jsou důležitá ve chvíli, kdy přijímající systém vynucuje konkrétní XML schéma (XSD).
Proč použít online konvertor JSON na XML?
Ruční psaní XML ze zdroje JSON je zdlouhavé a náchylné k chybám. Neshodující se tagy, chybějící zavírací prvky a nesprávné vnořování produkují dokumenty, které selhávají při ověřování schématem. Konvertor zpracuje strukturální překlad automaticky.
Případy použití JSON na XML
Pravidla mapování JSON na XML
Protože žádný univerzální standard neřídí převod JSON na XML, různé nástroje produkují odlišný výstup. Tabulka níže ukazuje konvence mapování používané tímto konvertorem a většinou populárních knihoven (js2xmlparser, xmlbuilder, fast-xml-parser). Konvence opakovaných sourozenců pro pole se stala dominantní, protože zrcadlí způsob, jakým XML schémata přirozeně modelují kolekce — každá položka je prvkem první třídy spíše než zahaleným podřízeným prvkem — a čistě se integruje s XPath dotazy a XSLT transformacemi.
| JSON Type | JSON Example | XML Output |
|---|---|---|
| Object | {"name": "Alice"} | <name>Alice</name> |
| Nested object | {"user": {"age": 30}} | <user><age>30</age></user> |
| Array | {"colors": ["red", "blue"]} | <colors>red</colors><colors>blue</colors> |
| String | "hello" | <root>hello</root> |
| Number | 42 | <root>42</root> |
| Boolean | true | <root>true</root> |
| Null | null | <root/> |
| Empty object | {} | <root/> |
| Empty array | [] | (no child elements) |
Příklady kódu
Níže jsou spustitelné ukázky pro převod JSON na XML ve třech prostředích. Každý příklad produkuje správně formovaný XML ze vzorového JSON objektu.
import { create } from 'xmlbuilder2';
const json = {
order: {
id: 1024,
items: [
{ sku: "A1", qty: 2 },
{ sku: "B3", qty: 1 }
],
shipped: false
}
};
const xml = create({ version: '1.0' })
.ele(json)
.end({ prettyPrint: true });
console.log(xml);
// → <?xml version="1.0"?>
// → <order>
// → <id>1024</id>
// → <items>
// → <sku>A1</sku>
// → <qty>2</qty>
// → </items>
// → <items>
// → <sku>B3</sku>
// → <qty>1</qty>
// → </items>
// → <shipped>false</shipped>
// → </order>import json
import xmltodict
data = {
"order": {
"id": 1024,
"items": [
{"sku": "A1", "qty": 2},
{"sku": "B3", "qty": 1}
],
"shipped": False
}
}
# xmltodict.unparse expects a single root key
xml = xmltodict.unparse(data, pretty=True)
print(xml)
# → <?xml version="1.0" encoding="utf-8"?>
# → <order>
# → <id>1024</id>
# → <items>
# → <sku>A1</sku>
# → <qty>2</qty>
# → </items>
# → <items>
# → <sku>B3</sku>
# → <qty>1</qty>
# → </items>
# → <shipped>false</shipped>
# → </order>package main
import (
"encoding/json"
"encoding/xml"
"fmt"
)
type Item struct {
SKU string `json:"sku" xml:"sku"`
Qty int `json:"qty" xml:"qty"`
}
type Order struct {
XMLName xml.Name `xml:"order"`
ID int `json:"id" xml:"id"`
Items []Item `json:"items" xml:"items"`
Shipped bool `json:"shipped" xml:"shipped"`
}
func main() {
raw := `{"id":1024,"items":[{"sku":"A1","qty":2},{"sku":"B3","qty":1}],"shipped":false}`
var order Order
json.Unmarshal([]byte(raw), &order)
out, _ := xml.MarshalIndent(order, "", " ")
fmt.Println(xml.Header + string(out))
// → <?xml version="1.0" encoding="UTF-8"?>
// → <order>
// → <id>1024</id>
// → <items>
// → <sku>A1</sku>
// → <qty>2</qty>
// → </items>
// → ...
}