XML to JSON

Převeďte XML do formátu JSON

Zkusit příklad

XML Vstup

JSON Výstup

Běží lokálně · Bezpečné pro vkládání tajných údajů
JSON se zobrazí zde…

Co je převod XML na JSON?

Převod XML na JSON je proces transformace dat z Extensible Markup Language (XML) do JavaScript Object Notation (JSON). Oba formáty reprezentují strukturovaná hierarchická data, ale používají odlišnou syntaxi a datové modely. XML používá otevírací a uzavírací značky s volitelnými atributy, zatímco JSON používá páry klíč–hodnota, pole a primitivní typy. Převod XML na JSON umožňuje pracovat s XML daty v prostředích, kde je JSON nativním formátem — například v JavaScriptových prostředích, REST API a NoSQL databázích.

Převod není vždy jednoznačný. XML obsahuje konstrukty bez přímého ekvivalentu v JSON: atributy, smíšený obsah (text prokládaný podřízenými prvky), zpracovatelské instrukce, komentáře, sekce CDATA a deklarace jmenných prostorů. Různé převodní knihovny zpracovávají tyto konstrukty odlišně, proto existuje více konvencí. Nejčastější přístup přidává před názvy atributů znak @ a umísťuje textový obsah do pole #text, pokud jsou na stejném prvku přítomny atributy.

Převod XML na JSON je běžným krokem při migraci z SOAP na REST, při konzumaci starších podnikových API nebo při zpracování vládních a finančních datových kanálů, které vyžadují XML. Namísto souběžného přepisování producentů a konzumentů týmy převádějí XML payload na hranici a předávají JSON dál. AWS API Gateway, Apache Camel a MuleSoft tento vzor nativně podporují.

XML input
<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>
JSON output
{
  "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"
      }
    ]
  }
}

Proč použít online převodník XML na JSON?

Psaní jednorázového převodního skriptu zabere čas, zejména pokud XML obsahuje atributy, jmenné prostory nebo opakující se prvky, které je třeba převést na JSON pole. Převodník v prohlížeči vám poskytne výstup JSON během několika sekund, abyste mohli zkontrolovat strukturu a pokračovat v práci.

Okamžitý převod
Vložte XML a ihned získejte JSON výstup. Není třeba instalovat knihovnu, psát skript ani konfigurovat build nástroj.
🔒
Zpracování zaměřené na soukromí
Veškerý převod probíhá ve vašem prohlížeči pomocí JavaScriptu. Vaše XML data nikdy neopustí váš počítač a nikdy se neodesílají na žádný server.
🔀
Zpracovává atributy a pole
Atributy jsou mapovány na klíče s předponou @. Opakující se sourozenecké prvky jsou automaticky seskupeny do JSON polí podle konvence Parker nebo BadgerFish.
📋
Bez účtu
Otevřete stránku, vložte XML a zkopírujte výsledek JSON. Žádná registrace, žádný API klíč, žádné limity použití.

Případy použití převodníku XML na JSON

Vývoj frontendu
Převeďte odpovědi XML API na JSON, abyste mohli vykreslovat data v komponentách React, Vue nebo Angular bez přidávání knihovny pro parsování XML do klientského balíčku.
Backendové inženýrství
Transformujte SOAP payloady, RSS/Atom kanály nebo XML-RPC odpovědi na JSON na vrstvě API gateway před předáním dat mikroslužbám, které očekávají JSON vstup.
DevOps a CI/CD
Převeďte XML zprávy z testů (JUnit, NUnit, xUnit) na JSON pro zpracování řídicími panely, Slack boty nebo vlastními CI notifikačními pipeline.
QA a testování
Porovnejte převedené JSON snímky s očekávaným výstupem a ověřte, zda XML-produkující služba nezměnila strukturu odpovědi mezi verzemi.
Datové inženýrství
Převeďte XML exporty z vládních portálů, finančních kanálů (FIX, FIXML) nebo zdravotnických systémů (HL7 CDA) na JSON pro načtení do BigQuery, Snowflake nebo Elasticsearch.
Výuka datových formátů
Studenti studující výměnu dat mohou vkládat ukázky XML do převodníku a přesně vidět, jak se prvky, atributy a zanořování mapují na klíče, objekty a pole JSON.

Referenční tabulka mapování XML na JSON

XML a JSON mají odlišné datové modely. Tabulka níže ukazuje, jak se každý konstrukt XML mapuje na ekvivalent v JSON podle nejběžnější konvence (@ pro atributy, #text pro text společně s atributy). Některé konstrukty, jako smíšený obsah a komentáře, nemají standardní reprezentaci v JSON.

Konstrukt XMLPříklad XMLEkvivalent JSON
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
Namespacesxmlns:prefix="uri"Prefix preserved or stripped
Empty element<el/>"el": null or ""
Comments<!-- note -->Discarded (no JSON equivalent)

Srovnání konvencí pro převod XML na JSON

Neexistuje jediný standard, který by určoval, jak se XML mapuje na JSON. Jsou rozšířeny tři konvence, každá s jinými kompromisy pro zpracování atributů, detekci polí a zachování textu.

BadgerFish
Každý textový uzel jde do klíče $. Atributy dostávají klíče s předponou @. Jmenné prostory jsou zachovány jako položky @xmlns. Podrobná, ale bezeztrátová: lze provést zpětný převod na XML bez ztráty dat.
Parker
Zcela odstraňuje atributy a převádí prvky obsahující pouze text na holé hodnoty. Opakující se prvky se stávají poli. Kompaktní a přehledná, ale destruktivní: atributy a informace o jmenných prostorech jsou zahozeny.
GData (Google Data)
Používá $t pro textový obsah a zachovává atributy jako klíče nejvyšší úrovně bez předpony. Střední cesta mezi podrobností BadgerFish a jednoduchostí Parker. Historicky používána v Google API.

Ukázky kódu

Níže jsou funkční příklady pro převod XML na JSON v JavaScriptu, Pythonu, Go a na příkazovém řádku. Každý příklad zpracovává zanořené prvky a opakující se sourozenecké značky.

JavaScript (browser)
// 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" }
Python
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))
Go
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"] }
}
CLI (xmllint + jq / yq)
# 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))))
"

Často kladené otázky

Je převod XML na JSON bezeztrátový?
Ne vždy. Atributy XML, komentáře, zpracovatelské instrukce a deklarace jmenných prostorů nemají přímý ekvivalent v JSON. Většina převodníků zachovává atributy pomocí konvence s předponou @, ale komentáře a zpracovatelské instrukce jsou zahozeny. Pokud potřebujete plně reverzibilní zpětný převod, použijte bezeztrátovou konvenci jako BadgerFish.
Jak jsou atributy XML reprezentovány v JSON?
Nejběžnějším přístupem je přidání předpony @ před názvy atributů. Například <book id="1"> se stane {"@id": "1"}. Některé převodníky místo toho používají vnořený objekt "_attributes". Konkrétní konvence závisí na použité knihovně.
Jak převodník zpracovává opakující se prvky XML?
Pokud se prvek objeví více než jednou pod stejným rodičem, převodník je seskupí do JSON pole. Například dva sourozenecké prvky item se stanou {"item": ["a", "b"]}. Jediný prvek item zůstane jako prostá řetězcová hodnota, pokud není zapnut režim vynuceného pole.
Mohu převést JSON zpět na XML?
Ano, ale výsledek závisí na konvenci použité při původním převodu. Pokud byly atributy zachovány s předponami @, převodník JSON na XML je může obnovit. Pokud původní převod použil Parker (který atributy zahodí), tato informace je ztracena. ToolDeck také nabízí nástroj JSON na XML pro zpětný převod.
Co se děje s jmennými prostory XML při převodu?
Zpracování jmenných prostorů se liší podle knihovny. Některé převodníky zachovávají předponu v názvu klíče (např. "ns:element"), jiné mapují deklarace xmlns do samostatných polí a některé jmenné prostory zcela odstraní. Ověřte výstup pro konkrétní XML a zjistěte chování jmenných prostorů.
Existuje standard pro převod XML na JSON?
Neexistuje žádný formální standard W3C ani IETF. Nejbližšími referencemi jsou konvence BadgerFish, konvence Parker a mapování OASIS XSLT-to-JSON. V praxi každá knihovna implementuje vlastní pravidla, proto stejné XML může v různých nástrojích produkovat mírně odlišný JSON.
Jak zpracovat velké XML soubory?
Převodníky v prohlížeči fungují dobře pro soubory do několika megabajtů. Pro větší soubory (10 MB a více) použijte streamovací parser jako iterparse v Pythonu (xml.etree.ElementTree) nebo xml-stream v Node.js. Tyto nástroje zpracovávají dokument postupně bez načítání celého stromu do paměti.