DevOps-insinööri vie Kubernetes-konfiguraation YAML:na mutta tarvitsee lähettää sen API:lle, joka hyväksyy vain JSON:n. Analyytikko saa API-vastausdatan JSON:na mutta tarvitsee sen taulukkolaskentaan. Datatieteilijä vie CSV:n tietokannasta mutta tarvitsee rakenteisen JSON:n web-dashboardia varten.
Formaattimuunnos ei ole vain mekaaninen toimenpide. Kukin formaatti tekee erilaisia kompromisseja, ja mitä käännöksessä menetetään on yhtä tärkeää ymmärtää kuin itse muunnoksen tekeminen.
Kolme formaattia, kolme filosofiaa
Kukin formaatti suunniteltiin eri yleisölle ja eri ongelmaan:
| Formaatti | Syntynyt | Suunniteltu | Ydinfilosofia |
|---|---|---|---|
| CSV | ~1972 | Tiedonvaihto ohjelmien välillä | Maksimaalinen yksinkertaisuus — vain rivejä ja sarakkeita |
| JSON | 2001 | Web-tiedonvaihto | Koneluettava rakenteinen data tiukoilla säännöillä |
| YAML | 2001 | Konfiguraatiotiedostot | Ihmisluettava rakenteinen data minimisyntaksilla |
CSV olettaa datasi olevan tasainen taulukko. Jokainen arvo on merkkijono. Sisäkkäisyydestä, tyypeistä tai metatiedoista ei ole käsitettä.
JSON olettaa datallasi olevan rakenne — objekteja, taulukoita, tyyppejä (merkkijonot, numerot, totuusarvot, null). Se on tiukka ja yksiselitteinen, mikä tekee siitä ihanteellisen koneille mutta sanallisen ihmisille.
YAML olettaa ihmisen lukevan ja muokkaavan tiedostoa. Se käyttää sisennystä aaltosulkeiden sijaan, tukee kommentteja ja sillä on rennompi syntaksi. Teknisesti YAML on JSON:n ylijoukko — mikä tahansa kelvollinen JSON-dokumentti on myös kelvollista YAML:a.
YAML on JSON:n ylijoukko Voit liittää JSON-dokumentin suoraan YAML-jäsentimeen ja se toimii. Päinvastoin ei toimi — YAML:n ominaisuuksilla kuten kommenteilla, ankkureilla ja monirivisillä merkkijonoilla ei ole JSON-vastinetta.
Todelliset muunnostilanteet
Konfiguraation siirto (JSON:sta YAML:iin, YAML:sta JSON:iin)
Tämä on yleisin muunnos. Eri työkalut odottavat eri konfiguraatioformaatteja:
- Docker Compose, Kubernetes, GitHub Actions, Ansible käyttävät YAML:a
- package.json, tsconfig.json, ESLint käyttävät JSON:a
- Työkalujen välinen siirtyminen tarkoittaa usein konfiguraatioiden muuntamista
Tämä muunnos on häviötön molempiin suuntiin datasisällön osalta — mutta YAML-kommentit menetetään JSON:iin muunnettaessa, koska JSON:ssa ei ole kommenttisyntaksia.
Data-analyysi (JSON:sta CSV:hen)
API-vastaukset tulevat JSON:na. Analyytikot tarvitsevat taulukkolaskentaa. Tämä muunnos toimii hyvin tasaisille JSON-taulukoille — objektitaulukot identtisillä avaimilla kuvautuvat luonnollisesti riveiksi ja sarakkeiksi.
Mutta se hajoaa sisäkkäisen datan kohdalla. JSON-objektilla, jossa on address.city-kenttä ja skills-taulukko, ei ole luonnollista CSV-esitystä. Muunnin joutuu valitsemaan: tasoittaa sisäkkäiset avaimet (address.city sarakkeeksi), sarjallistaa sisäkkäiset arvot merkkijonoiksi tai hylätä ne.
Datan tuonti (CSV:stä JSON:iin)
Käänteinen tilanne: taulukkolaskentadatan tuonti web-sovellukseen tai API:in. CSV:stä JSON:iin muunnos luo objektitaulukon sarakeotsikoilla avaimina. Haaste on, että CSV:ssä ei ole tyyppitietoa — numero 42, merkkijono "42" ja totuusarvo true ovat kaikki vain tekstiä CSV:ssä. Muuntimen täytyy arvata tyypit.
Ihmisluettavuus (JSON:sta YAML:iin)
Joskus tarvitsee vain tehdä tiheästä JSON-konfiguraatiotiedostosta luettava. YAML:iin muuntaminen antaa siistin sisennyksen ja mahdollisuuden lisätä kommentteja dokumentointia varten. Tämä on erityisen arvokasta suurille konfiguraatiotiedostoille, joita tiimi ylläpitää.
Mitä muunnoksessa menetetään
Tämä on kriittinen tieto, joka säästää virheenkorjausaikaa:
| Muunnos | Mitä menetetään |
|---|---|
| YAML:sta JSON:iin | Kommentit (JSON:ssa ei ole kommenttisyntaksia) |
| JSON:sta CSV:hen | Sisäkkäisyys (CSV on tasainen), tyypit (kaikesta tulee tekstiä), taulukot |
| CSV:stä JSON:iin | Ei mitään (mutta tyypit täytyy päätellä — "42" vs 42) |
| CSV:stä YAML:iin | Ei mitään (sama tyyppipäättelyongelma) |
| JSON:sta YAML:iin | Ei mitään (YAML on JSON:n ylijoukko) |
| YAML:sta CSV:hen | Kommentit, sisäkkäisyys, tyypit, ankkurit/aliakset |
Kaava on selvä: muunnokset kohti CSV:tä menettävät eniten tietoa, koska CSV on yksinkertaisin formaatti. Muunnokset JSON:n ja YAML:n välillä ovat lähes häviöttömiä. Ja YAML-kommentit menetetään aina YAML:sta poistuttaessa.
Kaksisuuntainen vs. yksisuuntainen JSON-YAML ja YAML-JSON ovat käytännössä kaksisuuntaisia (edestakainen muunnos turvallinen, paitsi kommenttien osalta). JSON-CSV ja YAML-CSV ovat yksisuuntaisia monimutkaiselle datalle — sisäkkäisyyttä ei voi rekonstruoida tasaisesta CSV:stä.
Yleiset sudenkuopat muunnettaessa
YAML:n tyyppipakotuksen ansat
YAML tulkitsee automaattisesti tietyt merkkijonot ei-merkkijonotyypeiksi. Sana no muuttuu totuusarvoksi false. Sana yes muuttuu true:ksi. Merkkijono 1.0 muuttuu liukuluvuksi. Maakoodit kuten NO (Norja) ovat aiheuttaneet tunnettuja bugeja. Laita aina lainausmerkit epäselvien arvojen ympärille YAML:ssa.
CSV-erottimen ja merkistökoodauksen sekaannus
Kaikki CSV:t eivät käytä pilkkua. Eurooppalaiset CSV:t käyttävät usein puolipistettä (koska pilkku on desimaalierotin monissa eurooppalaisissa lukuformaateissa). Tabulaattorierotetut arvot (TSV) ovat toinen variantti. Ja merkistökoodausten yhteensopimattomuus (UTF-8 vs Latin-1) tuottaa vääristyneitä aksenttimerkkejä.
JSON:n loppupilkkuongelma
JSON ei salli loppupilkkuja. Tämä on kelvollista JavaScriptiä: {"a": 1, "b": 2,} — mutta se on virheellistä JSON:a. Yksi ylimääräinen loppupilkku aiheuttaa jäsennysvirheen.
Suurten tietojoukkojen suorituskyky
Miljoonien rivien tietojoukoille CSV on huomattavasti tehokkaampi kuin JSON tai YAML. JSON lisää aaltosulkeita, hakasulkeita ja lainausmerkkejä jokaiseen arvoon. Miljoonan rivin CSV voi olla 50 MB; vastaava JSON voi olla 150 MB.
Oikean formaatin valinta alusta alkaen
Sen sijaan, että muunnat jälkikäteen, oikean formaatin valitseminen etukäteen välttää tiedon menetyksen:
- Taulukkodata taulukkolaskentaan tai tietokantoihin — CSV
- Rakenteinen data API:ille tai web-sovelluksille — JSON
- Konfiguraatio, jota ihmiset muokkaavat — YAML
- Monimutkainen sisäkkäinen data kommenteilla — YAML
- Tiedonvaihto järjestelmien välillä — JSON
Lue lisää
Muunna JSON:n, YAML:n ja CSV:n välillä välittömästi selainpohjaisilla työkaluilla:
- Muunna dataformaatteja — liitä datasi, valitse kohdeformaatti, lataa tulos
- JSON-muotoilija — validoi, muotoile ja minimoi JSON
- JSON-CSV-muunnin — muunna JSON-taulukot taulukkolaskentavalmiiksi CSV:ksi
- YAML-JSON-muunnin — muunna YAML:n ja JSON:n välillä kommenttitietoisesti
