Nejdřív vyber mapování
XML je uspořádaný strom elementů s atributy, jmennými prostory a textovými uzly. JSON obsahuje objekty, pole a skalární hodnoty. Neexistuje jediný standardní JSON zápis libovolného XML. Některé knihovny používají @id, jiné _id, a text může být v #text či _text. Oba systémy musejí znát stejnou konvenci.
Následující příklady používají výchozí nastavení rozhraní XML nástroje: prefix atributů @, textový klíč #text, pole jen pro opakované elementy, sloučený text a vypnutý převod čísel. Jde o nastavení tohoto webu, nikoli pravidlo JSON. Kořenový element je klíč vnějšího objektu.
XML → JSON krok za krokem
<kniha id="k1"><nazev>XML</nazev><cena mena="CZK">12.50</cena></kniha> {
"kniha": {
"@id": "k1",
"nazev": "XML",
"cena": {
"@mena": "CZK",
"#text": "12.50"
}
}
} - Vlož XML do editoru XML nástroje a ověř syntaxi.
- Otevři Převody, zvol JSON a ponech uvedené nastavení atributů a textu.
- Spusť převod a porovnej výstup s ukázkou. Cena je objekt, protože má atribut i text; název je jen řetězec.
- Změň prefix na
_a textový klíč na_text. V ceně vzniknou klíče_menaa_text; hodnoty zůstanou stejné.
Odesílatel a příjemce musí používat stejné názvy klíčů a stejné mapování XML na JSON. Bezprefixové atributy mohou kolidovat s názvy elementů; pro předávání neznámých dat tuto volbu nepoužívej bez kontroly.
JSON → XML: stejná dohoda opačným směrem
{
"katalog": {
"@verze": "1",
"kniha": [
{
"@id": "k1",
"nazev": "XML & JSON"
},
{
"@id": "k2",
"nazev": "XPath"
}
]
}
} <katalog verze="1"><kniha id="k1"><nazev>XML & JSON</nazev></kniha><kniha id="k2"><nazev>XPath</nazev></kniha></katalog> V převodním panelu vlož JSON do výstupního editoru a použij opačný směr. Ponech stejné mapování. Pole kniha se změní na opakované sourozence. Znak ampersand serializátor escapuje; do JSON hodnoty nepiš předem &.
Tento převod vyžaduje objekt s jedním kořenovým klíčem a názvy použitelné v XML. Obecné JSON, například pole na kořeni nebo klíč s mezerou, se bez dalšího mapování do tohoto modelu nevejde. Při integraci API raději vytvoř explicitní cílový model než automaticky přejmenovávat všechny problematické klíče.
Jak udržet stabilní pole
<katalog><kniha>XML</kniha></katalog> {"katalog":{"kniha":"XML"}} {"katalog":{"kniha":["XML"]}} Při dvou knihách automatické mapování vytvoří pole. Klient by tak musel větvit kód podle počtu položek. Zvol vybrané prvky a napiš kniha do seznamu názvů; režim každý prvek dělá pole i z jiných potomků. Chybějící element stále není automaticky prázdné pole. Pokud API vyžaduje [], doplň tuto hodnotu v doménovém mapování.
Čísla, identifikátory a prázdné hodnoty
<zaznam><id>001</id><cena>12.50</cena><aktivni>true</aktivni><poznamka/></zaznam> {"zaznam":{"id":"001","cena":"12.50","aktivni":"true","poznamka":""}} {"zaznam":{"id":"001","cena":12.5,"aktivni":true,"poznamka":null}} 001 neodpovídá syntaxi čísla používané převodníkem a zůstane text. Hodnota 12.50 jako číslo ztratí informaci o dvou desetinných místech. U částek a identifikátorů určete s příjemcem, zda se předávají jako text, nebo číslo a jakou přesnost je potřeba zachovat. Automatický odhad typu nenahrazuje kontrolu podle XSD ani JSON Schema.
Vynechaný element, prázdný element a element s xsi:nil="true" mají různý význam. Volba prázdné hodnoty "", null nebo {} pouze řídí reprezentaci. Nástroj z ní neodvozuje XSD nillability. Při opačném převodu null nevytváří automaticky xsi:nil. Prázdný string a null se proto mohou vrátit jako stejně prázdný element.
Smíšený obsah a ztráta pořadí
<p>Ahoj <b>Evo</b>!</p> {"p":{"b":"Evo","#text":"Ahoj !"}} {"p":{"#content":["Ahoj ",{"b":"Evo"},"!"]}} Režim zachovat pořadí použij před převodem odstavců, popisů a dalších elementů obsahujících text i potomky. Opačný převod pak ví, kam vložit b. Tento režim ale není obecná archivace XML: komentáře, processing instructions, původní entity a rozlišení CDATA/textu se neuchovávají. Zpracování také ořezává některé krajní bílé znaky a vynechává čistě whitespace textové uzly. Pro přesnou kopii uchovej původní soubor.
Jmenné prostory a kontrola návratu
<r xmlns:a="urn:sklad" xmlns:b="urn:ucetnictvi"><a:kod>001</a:kod><b:kod>002</b:kod></r> Bez odstranění namespace se v JSON zachovají prefixovaná jména a deklarace jako atributy. Prefix však není identita namespace: dva různé prefixy mohou označovat stejné URI. Po odstranění namespace skončí oba elementy pod kod a jejich rozdílný význam zmizí. Zvlášť zkontroluj atributové hodnoty typu QName, například xsi:type, jejichž interpretace vyžaduje vazbu prefixu.
- Ověř vstup podle požadovaného XSD nebo JSON Schema, pokud je pro daný formát k dispozici.
- Proveď převod se zdokumentovanými volbami.
- Validuj výstup podle cílového schématu.
- Proveď návrat a porovnej hodnoty, počet záznamů, namespace a smíšený obsah.
- Odliš doménovou shodu od shody původních bajtů. Pro podpis nebo důkaz původu pracuj s původním dokumentem.
Pokračuj XSD vs JSON Schema, porovnáním XML a CSV/YAML převody. Specifikace XML 1.0 a RFC 8259 definují vstupní formáty, nikoli tuto převodní konvenci.