Ať už konfigurujete webovou aplikaci, vyměňujete data mezi službami, analyzujete export z tabulkového procesoru nebo čtete odpověď API, setkáte se s daty uloženými ve strukturovaných textových formátech. Čtyři nejběžnější jsou JSON, YAML, CSV a XML.
Každý formát byl navržen s jinými cíli a volba toho správného závisí na vašem případu použití. Tento článek vysvětluje, co každý formát je, jak vypadá, kdy ho použít a jak se vzájemně porovnávají.
JSON — JavaScript Object Notation
JSON se stal dominantním formátem pro výměnu dat na webu. Navzdory svému názvu je nezávislý na jazyku a používá se všude.
Příklad syntaxe:
{
"name": "Alice Martin",
"age": 34,
"skills": ["Python", "SQL", "Docker"],
"address": {
"city": "Lyon",
"country": "France"
}
}
Klíčové charakteristiky:
- Páry klíč-hodnota s čistou, čitelnou syntaxí
- Podporuje řetězce, čísla, booleany, pole, objekty a null
- Žádné komentáře ve standardním JSON
- Přísná syntaxe — koncové čárky a jednoduché uvozovky jsou chyby
Běžné použití: REST API, konfigurační soubory (package.json, tsconfig.json), NoSQL databáze (MongoDB), výměna dat mezi frontendem a backendem.
Dobré vědět. Přísná syntaxe JSON je současně silnou i slabou stránkou. Parsování je díky ní spolehlivé a jednoznačné, ale také to znamená, že jedna chybějící čárka nebo nadbytečná koncová čárka rozbije celý soubor.
YAML — YAML Ain't Markup Language
YAML byl navržen jako nejčitelnější formát serializace dat pro člověka. Používá odsazení místo závorek a je zvláště populární pro konfigurační soubory.
Příklad syntaxe:
name: Alice Martin
age: 34
skills:
- Python
- SQL
- Docker
address:
city: Lyon
country: France
Klíčové charakteristiky:
- Struktura založená na odsazení (bez závorek a složených závorek)
- Podporuje komentáře pomocí
# - Podporuje všechny datové typy JSON plus další (data, víceřádkové řetězce)
- Citlivý na bílé znaky — nesprávné odsazení rozbije soubor
Běžné použití: Soubory Docker Compose, manifesty Kubernetes, CI/CD pipeline (GitHub Actions, GitLab CI), Ansible playbooky, konfigurace Hugo/Jekyll.
YAML je nadmnožinou JSON, což znamená, že jakýkoli platný dokument JSON je také platný YAML. Nicméně flexibilita YAML může být dvojsečný meč — jeho implicitní přetypování (například yes interpretované jako boolean true nebo 3.10 stávající se 3.1) způsobilo mnoho jemných chyb.
CSV — Comma-Separated Values
CSV je nejjednodušší strukturovaný datový formát. Ukládá tabulková data jako prostý text, kde každý řádek je řádkem a hodnoty jsou odděleny čárkami (nebo někdy středníky, tabulátory či jinými oddělovači).
Příklad syntaxe:
name,age,city,country
Alice Martin,34,Lyon,France
Bob Dupont,28,Paris,France
Carol Smith,41,London,UK
Klíčové charakteristiky:
- Extrémně jednoduchý — jen text s oddělovači
- Žádné datové typy — vše je řetězec
- Žádný standardní způsob reprezentace vnořených dat
- Žádný oficiální univerzální standard (RFC 4180 existuje, ale není univerzálně dodržován)
- Velmi malé velikosti souborů
Běžné použití: Exporty z tabulkových procesorů, importy/exporty databází, analýza dat (pandas, R), jednoduchá výměna dat, soubory logů.
Jednoduchost CSV je jeho největší silou i největším omezením. Dokonale se hodí pro plochá tabulková data, ale nedokáže reprezentovat hierarchické struktury. Hraniční případy (čárky v hodnotách, víceřádková pole, problémy s kódováním) činí parsování složitějším, než se na první pohled zdá.
XML — Extensible Markup Language
XML byl dominantním formátem pro výměnu dat, než ho nahradil JSON. Používá syntaxi založenou na značkách podobnou HTML a podporuje složité funkce jako schémata, jmenné prostory a transformace.
Příklad syntaxe:
<?xml version="1.0" encoding="UTF-8"?>
<person>
<name>Alice Martin</name>
<age>34</age>
<skills>
<skill>Python</skill>
<skill>SQL</skill>
<skill>Docker</skill>
</skills>
<address>
<city>Lyon</city>
<country>France</country>
</address>
</person>
Klíčové charakteristiky:
- Struktura založená na značkách s otevíracími a uzavíracími tagy
- Podporuje atributy, jmenné prostory, schémata (XSD) a transformace (XSLT)
- Podporuje komentáře
- Velmi ukecaný ve srovnání s jinými formáty
- Extrémně dobře definovaný standard s přísnou validací
Běžné použití: Webové služby SOAP, podnikové integrace, formáty dokumentů (DOCX, SVG, RSS), konfigurační soubory v ekosystémech Java/.NET, výměna vládních a finančních dat.
XML je ukecnější než JSON nebo YAML, ale jeho schopnosti validace schémat ho činí nepostradatelným v kontextech, kde jsou integrita dat a formální kontrakty mezi systémy klíčové.
Porovnání vedle sebe
| Funkce | JSON | YAML | CSV | XML |
|---|---|---|---|---|
| Čitelnost pro člověka | Dobrá | Vynikající | Dobrá (tabulky) | Průměrná |
| Ukecanost | Nízká | Nízká | Velmi nízká | Vysoká |
| Komentáře | Ne | Ano | Ne | Ano |
| Vnořená data | Ano | Ano | Ne | Ano |
| Datové typy | Základní | Bohaté | Žádné (vše řetězce) | Přes schéma |
| Validace schématu | JSON Schema | Žádný standard | Ne | XSD |
| Velikost souboru | Malá | Malá | Nejmenší | Velká |
| Rychlost parsování | Rychlá | Střední | Rychlá | Střední |
| Hlavní doména | Webová API | Konfigurace DevOps | Data/tabulky | Korporátní |
Kdy použít který
- Zvolte JSON, když budujete webová API, ukládáte konfiguraci pro projekty JavaScript/TypeScript nebo vyměňujete data mezi službami. Je to výchozí volba pro většinu moderních aplikací.
- Zvolte YAML, když píšete konfigurační soubory, které budou lidé často číst a upravovat. Jeho čitelnost a podpora komentářů ho činí ideálním pro DevOps a infrastructure-as-code.
- Zvolte CSV, když pracujete s tabulkovými daty, importujete/exportujete z tabulkových procesorů nebo databází, nebo když velikost souboru musí být minimální. Vyhněte se mu pro cokoli hierarchického.
- Zvolte XML, když pracujete s podnikovými systémy, SOAP API nebo kontexty vyžadujícími formální validaci schématu. Je to také správná volba, když potřebujete dokumentově orientované značkování (jako SVG nebo RSS).
Konverze mezi formáty
Konverze mezi těmito formáty je běžný úkol. Několik věcí k zapamatování:
- JSON na YAML (a naopak) je obvykle bezztrátová, protože YAML je nadmnožinou JSON.
- CSV na JSON/YAML funguje dobře pro plochá data, ale vyžaduje rozhodnutí o struktuře pro vnořený výstup.
- XML na JSON může ztratit informace (atributy, jmenné prostory, pořadí), protože JSON nemá odpovídající koncepty.
- Jakýkoli formát na CSV funguje pouze tehdy, pokud jsou data plochá nebo mohou být smysluplně zploštěna.
Tip. Při konverzi mezi formáty vždy ověřte výstup. Automatické konverze mohou tiše ztrácet data, zejména u XML atributů, přetypování YAML nebo hraničních případů kódování CSV.
Další informace
ToolK.io poskytuje bezplatné nástroje pro konverzi mezi JSON, YAML, CSV a XML, formátování a validaci vašich dat a nabízí související tutoriály pro práci se strukturovanými daty ve vašich projektech.
