Egy DevOps mérnök YAML-ként exportál egy Kubernetes konfigurációt, de el kell küldenie egy API-nak, amely csak JSON-t fogad el. Egy elemző JSON-ban kapja az API válaszadatokat, de táblázatban van rá szüksége. Egy adattudós CSV-t exportál egy adatbázisból, de strukturált JSON-ra van szüksége egy webes irányítópulthoz.
A formátumkonverzió nem csak mechanikus művelet. Minden formátum más kompromisszumokat köt, és annak megértése, hogy mi veszik el a fordításban, épp olyan fontos, mint tudni, hogyan kell konvertálni.
Három formátum, három filozófia
Minden formátumot más közönségnek és más problémára terveztek:
| Formátum | Megszületett | Tervezési cél | Alapfilozófia |
|---|---|---|---|
| CSV | ~1972 | Adatcsere programok között | Maximális egyszerűség — csak sorok és oszlopok |
| JSON | 2001 | Webes adatcsere | Gépolvasható strukturált adat szigorú szabályokkal |
| YAML | 2001 | Konfigurációs fájlok | Emberolvasható strukturált adat minimális szintaxissal |
A CSV feltételezi, hogy az adataid egy sík tábla. Minden érték karakterlánc. Nincs beágyazás, típuskezelés vagy metaadat koncepció.
A JSON feltételezi, hogy az adataidnak van struktúrája — objektumok, tömbök, típusok (karakterláncok, számok, logikai értékek, null). Szigorú és egyértelmű, ami ideálissá teszi gépek számára, de bőbeszédű az emberek számára.
A YAML feltételezi, hogy ember fogja olvasni és szerkeszteni a fájlt. Kapcsos zárójelek helyett behúzást használ, támogatja a megjegyzéseket, és lazább szintaxissal rendelkezik. Technikailag a YAML a JSON felülhalmaza — minden érvényes JSON dokumentum egyben érvényes YAML is.
A YAML a JSON felülhalmaza Egy JSON dokumentumot közvetlenül beilleszthetsz egy YAML elemzőbe, és működni fog. A fordítottja nem igaz — a YAML olyan funkciói, mint a megjegyzések, horgonyok és többsoros karakterláncok, nem rendelkeznek JSON megfelelővel.
Valós konverziós forgatókönyvek
Konfiguráció-migráció (JSON → YAML, YAML → JSON)
Ez a leggyakoribb konverzió. Különböző eszközök különböző konfigurációs formátumokat várnak:
- Docker Compose, Kubernetes, GitHub Actions, Ansible — YAML
- package.json, tsconfig.json, ESLint — JSON
- Eszközök közötti migráció gyakran konfigurációk konvertálását jelenti
Ez a konverzió mindkét irányban veszteségmentes az adattartalmat illetően — de a YAML megjegyzések elvesznek JSON-ra konvertáláskor, mivel a JSON-nak nincs megjegyzés-szintaxisa.
Adatelemzés (JSON → CSV)
Az API válaszok JSON-ban érkeznek. Az elemzőknek táblázat kell. Ez a konverzió jól működik sík JSON tömbök esetén — azonos kulcsokkal rendelkező objektumok tömbjei természetesen képezhetők le sorokra és oszlopokra.
De beágyazott adatok esetén összeomlik. Egy JSON objektum address.city mezővel és skills tömbbel nem rendelkezik természetes CSV reprezentációval. A konverternek döntenie kell: simítsa ki a beágyazott kulcsokat (address.city oszloppá válik), sorosítsa a beágyazott értékeket karakterláncokként, vagy hagyja el őket.
Adatimport (CSV → JSON)
A fordított forgatókönyv: táblázatos adatok importálása webalkalmazásba vagy API-ba. A CSV → JSON konverzió objektumok tömbjét hozza létre, az oszlopfejléceket kulcsokként használva. A csapda az, hogy a CSV-nek nincs típusinformációja — a 42 szám, a "42" karakterlánc és a true logikai érték mind csak szöveg a CSV-ben. A konverternek kell kitalálnia a típusokat.
Emberolvashatóság (JSON → YAML)
Néha csak olvashatóvá kell tenned egy sűrű JSON konfigurációs fájlt. YAML-ra konvertálva tiszta behúzást kapsz és lehetőséget megjegyzések hozzáadására dokumentáláshoz. Ez különösen értékes nagy konfigurációs fájlok esetén, amelyeket csapat fog karbantartani.
Mi veszik el a konverzióban
Ez az a kritikus tudás, amely hibakeresési időt takarít meg:
| Konverzió | Mi veszik el |
|---|---|
| YAML → JSON | Megjegyzések (a JSON-nak nincs megjegyzés-szintaxisa) |
| JSON → CSV | Beágyazás (a CSV sík), típusok (minden szöveggé válik), tömbök |
| CSV → JSON | Semmi (de a típusokat ki kell következtetni — "42" vs 42) |
| CSV → YAML | Semmi (ugyanaz a típus-következtetési probléma) |
| JSON → YAML | Semmi (a YAML a JSON felülhalmaza) |
| YAML → CSV | Megjegyzések, beágyazás, típusok, horgonyok/álnevek |
A minta egyértelmű: a CSV felé irányuló konverziók veszítik el a legtöbb információt, mert a CSV a legegyszerűbb formátum. A JSON és YAML közötti konverziók szinte veszteségmentesek. A YAML megjegyzések pedig mindig elvesznek, ha elhagyjuk a YAML-t.
Kétirányú vs. egyirányú A JSON-YAML és YAML-JSON konverziók gyakorlatilag kétirányúak (oda-vissza biztonságosak, a megjegyzések kivételével). A JSON-CSV és YAML-CSV konverziók összetett adatok esetén egyirányúak — nem lehet rekonstruálni a beágyazást egy sík CSV-ből.
Gyakori buktatók konvertáláskor
A YAML típuskényszerítési csapdái
A YAML automatikusan nem-karakterlánc típusokként értelmez bizonyos karakterláncokat. A no szó false logikai értékké válik. A yes szó true lesz. Az 1.0 karakterlánc lebegőpontos számmá válik. Az olyan országkódok, mint a NO (Norvégia) közismerten okoztak hibákat. Mindig idézd az egyértelmű értékeket YAML-ban.
CSV elválasztó és kódolási zavar
Nem minden CSV használ vesszőket. Az európai CSV-k gyakran pontosvesszőt használnak (mert a vessző tizedes elválasztó sok európai számformátumban). A tabulátorral elválasztott értékek (TSV) egy másik változat. A karakterkódolási eltérések (UTF-8 vs Latin-1) pedig eltorzított ékezetes karaktereket eredményeznek.
A JSON utolsó vessző problémája
A JSON nem engedélyezi az utolsó vesszőt. Ez érvényes JavaScript: {"a": 1, "b": 2,} — de érvénytelen JSON. Egyetlen felesleges vessző elemzési hibát okoz.
Nagy adathalmazok teljesítménye
Milliós sorú adathalmazok esetén a CSV lényegesen hatékonyabb, mint a JSON vagy a YAML. A JSON kapcsos zárójeleket és idézőjeleket ad minden értékhez. Egy egymillió soros CSV lehet 50 MB; a megfelelő JSON akár 150 MB is lehet.
A megfelelő formátum kiválasztása az elején
A konvertálás helyett az előzetes helyes formátumválasztás elkerüli az információveszteséget:
- Táblázatos adat táblázatkezelőkhöz vagy adatbázisokhoz — CSV
- Strukturált adat API-khoz vagy webalkalmazásokhoz — JSON
- Konfiguráció, amelyet emberek szerkesztenek — YAML
- Összetett beágyazott adat megjegyzésekkel — YAML
- Adatcsere rendszerek között — JSON
Tovább
Konvertálj JSON, YAML és CSV között azonnal böngészőalapú eszközökkel:
- Adatformátumok konvertálása — illeszd be az adataidat, válaszd ki a célformátumot, töltsd le az eredményt
- JSON formázó — JSON érvényesítése, formázása és minifikálása
- JSON → CSV konvertáló — JSON tömbök konvertálása táblázatkezelő-kompatibilis CSV-vé
- YAML-JSON konvertáló — konvertálás YAML és JSON között megjegyzés-tudatossággal
