DevOps inženýr exportuje konfiguraci Kubernetes jako YAML, ale potřebuje ji odeslat API, které přijímá pouze JSON. Analytik obdrží data z API odpovědi v JSON, ale potřebuje je v tabulce. Datový vědec exportuje CSV z databáze, ale potřebuje strukturovaný JSON pro webový dashboard.
Převod formátů není jen mechanická operace. Každý formát dělá jiné kompromisy a pochopení co se při převodu ztrácí je stejně důležité jako vědět, jak převádět.
Tři formáty, tři filozofie
Každý formát byl navržen pro jiné publikum a jiný problém:
| Formát | Vznik | Navržen pro | Základní filozofie |
|---|---|---|---|
| CSV | ~1972 | Výměna dat mezi programy | Maximální jednoduchost — jen řádky a sloupce |
| JSON | 2001 | Výměna webových dat | Strojově čitelná strukturovaná data s přísnými pravidly |
| YAML | 2001 | Konfigurační soubory | Lidsky čitelná strukturovaná data s minimální syntaxí |
CSV předpokládá, že vaše data jsou plochá tabulka. Každá hodnota je řetězec. Neexistuje koncept vnořování, typování ani metadat.
JSON předpokládá, že vaše data mají strukturu — objekty, pole, typy (řetězce, čísla, booleany, null). Je striktní a jednoznačný, což ho činí ideálním pro stroje, ale upovídaným pro lidi.
YAML předpokládá, že soubor bude číst a upravovat člověk. Používá odsazení místo závorek, podporuje komentáře a má uvolněnější syntaxi. Technicky je YAML nadmnožinou JSON — jakýkoli platný JSON dokument je také platný YAML.
YAML je nadmnožina JSON Můžete vložit JSON dokument přímo do YAML parseru a bude fungovat. Opačně to neplatí — funkce YAML jako komentáře, kotvy a víceřádkové řetězce nemají ekvivalent v JSON.
Reálné scénáře převodu
Migrace konfigurace (JSON na YAML, YAML na JSON)
Toto je nejčastější převod. Různé nástroje očekávají různé konfigurační formáty:
- Docker Compose, Kubernetes, GitHub Actions, Ansible používají YAML
- package.json, tsconfig.json, ESLint používají JSON
- Migrace mezi nástroji často znamená převod konfigurací
Tento převod je bezeztrátový v obou směrech pro obsah dat — ale YAML komentáře se ztrácejí při převodu na JSON, protože JSON nemá syntaxi komentářů.
Analýza dat (JSON na CSV)
API odpovědi přicházejí v JSON. Analytici potřebují tabulky. Tento převod funguje dobře pro ploché JSON pole — pole objektů se stejnými klíči se přirozeně mapují na řádky a sloupce.
Ale selhává u vnořených dat. JSON objekt s polem address.city a polem skills nemá přirozenou CSV reprezentaci. Převodník musí zvolit: zploštit vnořené klíče (address.city se stane sloupcem), serializovat vnořené hodnoty jako řetězce, nebo je zahodit.
Import dat (CSV na JSON)
Opačný scénář: import tabulkových dat do webové aplikace nebo API. Převod CSV na JSON vytváří pole objektů s hlavičkami sloupců jako klíči. Háček je v tom, že CSV nemá typové informace — číslo 42, řetězec "42" a boolean true jsou v CSV všechno jen text. Převodník musí typy odhadnout.
Čitelnost (JSON na YAML)
Někdy prostě potřebujete učinit hustý JSON konfigurační soubor čitelným. Převod na YAML vám dá čisté odsazení a možnost přidat komentáře pro dokumentaci. To je zvláště cenné pro velké konfigurační soubory spravované týmem.
Co se při převodu ztrácí
Toto je klíčové vědění, které šetří čas při ladění:
| Převod | Co se ztrácí |
|---|---|
| YAML na JSON | Komentáře (JSON nemá syntaxi komentářů) |
| JSON na CSV | Vnořování (CSV je plochý), typy (vše se stane textem), pole |
| CSV na JSON | Nic (ale typy musí být odvozeny — "42" vs 42) |
| CSV na YAML | Nic (stejný problém s odvozováním typů) |
| JSON na YAML | Nic (YAML je nadmnožina JSON) |
| YAML na CSV | Komentáře, vnořování, typy, kotvy/aliasy |
Vzorec je jasný: převody směrem k CSV ztrácejí nejvíce informací, protože CSV je nejjednodušší formát. Převody mezi JSON a YAML jsou téměř bezeztrátové. A YAML komentáře se vždy ztrácejí při opuštění YAML.
Obousměrné vs. jednosměrné JSON-na-YAML a YAML-na-JSON jsou efektivně obousměrné (bezpečné pro zpáteční cestu, kromě komentářů). JSON-na-CSV a YAML-na-CSV jsou pro složitá data jednosměrné — z plochého CSV nelze rekonstruovat vnořování.
Časté nástrahy při převodu
Pasti typové koerce v YAML
YAML automaticky interpretuje určité řetězce jako neřetězcové typy. Slovo no se stane boolean false. Slovo yes se stane true. Řetězec 1.0 se stane desetinným číslem. Kódy zemí jako NO (Norsko) proslule způsobovaly chyby. V YAML vždy dávejte nejednoznačné hodnoty do uvozovek.
Problémy s oddělovačem a kódováním CSV
Ne všechny CSV používají čárky. Evropské CSV často používají středníky (protože čárky jsou desetinné oddělovače v mnoha evropských číselných formátech). Hodnoty oddělené tabulátorem (TSV) jsou další variantou. A nesoulad kódování znaků (UTF-8 vs Latin-1) produkuje zkomolené znaky s diakritikou.
Problém koncové čárky v JSON
JSON nepovoluje koncové čárky. Toto je platný JavaScript: {"a": 1, "b": 2,} — ale je to neplatný JSON. Jediná koncová čárka způsobí chybu parsování.
Výkon u velkých datasetů
Pro datasety s miliony řádků je CSV výrazně efektivnější než JSON nebo YAML. JSON přidává závorky a uvozovky ke každé hodnotě. CSV s 1 milionem řádků může mít 50 MB; ekvivalentní JSON by mohl mít 150 MB.
Výběr správného formátu od začátku
Namísto převodu zpětně volba správného formátu předem zabraňuje ztrátě informací:
- Tabulková data pro tabulky nebo databáze — CSV
- Strukturovaná data pro API nebo webové aplikace — JSON
- Konfigurace upravovaná lidmi — YAML
- Složitá vnořená data s komentáři — YAML
- Výměna dat mezi systémy — JSON
Další informace
Převádějte mezi JSON, YAML a CSV okamžitě pomocí nástrojů v prohlížeči:
- Převod datových formátů — vložte data, zvolte cílový formát, stáhněte výsledek
- JSON Formátovač — validace, formátování a minifikace JSON
- Převodník JSON na CSV — převod JSON polí na CSV připravený pro tabulky
- Převodník YAML-JSON — převod mezi YAML a JSON s ohledem na komentáře
