Olitpa konfiguroimassa verkkosovellusta, vaihtamassa dataa palveluiden välillä, analysoimassa taulukkolaskentavientiä tai lukemassa API-vastausta, törmäät dataan, joka on tallennettu rakenteellisiin tekstiformaatteihin. Neljä yleisintä ovat JSON, YAML, CSV ja XML.
Kukin formaatti on suunniteltu erilaisin tavoittein, ja oikea valinta riippuu käyttötapauksestasi. Tämä artikkeli selittää, mikä kukin formaatti on, miltä se näyttää, milloin sitä käytetään ja miten ne vertautuvat toisiinsa.
JSON — JavaScript Object Notation
JSON:sta on tullut hallitseva tiedonvaihtoformaatti verkossa. Nimestään huolimatta se on kieliriippumaton ja sitä käytetään kaikkialla.
Syntaksiesimerkki:
{
"name": "Alice Martin",
"age": 34,
"skills": ["Python", "SQL", "Docker"],
"address": {
"city": "Lyon",
"country": "France"
}
}
Keskeiset ominaisuudet:
- Avain-arvo-parit selkeällä, luettavalla syntaksilla
- Tukee merkkijonoja, lukuja, booleaneita, taulukoita, objekteja ja null-arvoa
- Ei kommentteja tavallisessa JSON:ssa
- Tiukka syntaksi — loppupilkut ja yksittäiset lainausmerkit ovat virheitä
Yleisiä käyttötapauksia: REST API:t, konfiguraatiotiedostot (package.json, tsconfig.json), NoSQL-tietokannat (MongoDB), datan vaihto frontendin ja backendin välillä.
Hyvä tietää. JSON:n tiukka syntaksi on sekä vahvuus että heikkous. Se tekee jäsentämisestä luotettavaa ja yksiselitteistä, mutta se tarkoittaa myös, että yksi puuttuva pilkku tai ylimääräinen loppupilkku rikkoo koko tiedoston.
YAML — YAML Ain't Markup Language
YAML suunniteltiin ihmiselle luettavimmaksi dataserialisointiformaatiksi. Se käyttää sisennystä sulkujen sijaan ja on erityisen suosittu konfiguraatiotiedostoissa.
Syntaksiesimerkki:
name: Alice Martin
age: 34
skills:
- Python
- SQL
- Docker
address:
city: Lyon
country: France
Keskeiset ominaisuudet:
- Sisennyspohjainen rakenne (ei sulkuja tai aaltosulkeita)
- Tukee kommentteja merkillä
# - Tukee kaikkia JSON-tietotyyppejä ja lisää (päivämäärät, moniriviset merkkijonot)
- Välilyöntiherkkä — väärä sisennys rikkoo tiedoston
Yleisiä käyttötapauksia: Docker Compose -tiedostot, Kubernetes-manifestit, CI/CD-putket (GitHub Actions, GitLab CI), Ansible-playbook:it, Hugo/Jekyll-konfiguraatio.
YAML on JSON:n ylijoukko, mikä tarkoittaa, että jokainen kelvollinen JSON-dokumentti on myös kelvollista YAML:ia. YAML:n joustavuus voi kuitenkin olla kaksiteräinen miekka — sen implisiittinen tyyppimuunnos (esimerkiksi yes tulkitaan boolean-arvoksi true tai 3.10 muuttuu arvoksi 3.1) on aiheuttanut monia hienovaraisia virheitä.
CSV — Comma-Separated Values
CSV on yksinkertaisin rakenteellinen dataformaatti. Se tallentaa taulukkodataa puhtaana tekstinä, jossa jokainen rivi on tietue ja arvot erotetaan pilkuilla (tai joskus puolipisteillä, sarkaimilla tai muilla erottimilla).
Syntaksiesimerkki:
name,age,city,country
Alice Martin,34,Lyon,France
Bob Dupont,28,Paris,France
Carol Smith,41,London,UK
Keskeiset ominaisuudet:
- Äärimmäisen yksinkertainen — vain tekstiä erottimilla
- Ei tietotyyppejä — kaikki on merkkijonoja
- Ei vakiotapaa esittää sisäkkäistä dataa
- Ei virallista universaalia standardia (RFC 4180 on olemassa, mutta sitä ei noudateta universaalisti)
- Tiedostokoot ovat hyvin pieniä
Yleisiä käyttötapauksia: Taulukkolaskentaviennit, tietokantien tuonnit/-viennit, data-analyysi (pandas, R), yksinkertainen tiedonvaihto, lokitiedostot.
CSV:n yksinkertaisuus on sen suurin vahvuus ja suurin rajoitus. Se on täydellinen litteälle, taulukkomuotoiselle datalle, mutta ei voi esittää hierarkkisia rakenteita. Reunatapaukset (pilkut arvoissa, moniriviset kentät, koodausongelmat) tekevät jäsentämisestä monimutkaisempaa kuin miltä se ensin näyttää.
XML — Extensible Markup Language
XML oli hallitseva tiedonvaihtoformaatti ennen kuin JSON otti vallan. Se käyttää tunnistepohjaista syntaksia kuten HTML ja tukee monimutkaisia ominaisuuksia kuten skeemoja, nimiavaruuksia ja muunnoksia.
Syntaksiesimerkki:
<?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>
Keskeiset ominaisuudet:
- Tunnistepohjainen rakenne avaus- ja sulkutunnisteilla
- Tukee attribuutteja, nimiavaruuksia, skeemoja (XSD) ja muunnoksia (XSLT)
- Tukee kommentteja
- Erittäin monisanainen verrattuna muihin formaatteihin
- Äärimmäisen hyvin määritelty standardi tiukalla validoinnilla
Yleisiä käyttötapauksia: SOAP-verkkopalvelut, yritysintegraatiot, dokumenttiformaatit (DOCX, SVG, RSS), konfiguraatiotiedostot Java/.NET-ekosysteemeissä, julkisen sektorin ja rahoitusalan tiedonvaihto.
XML on monisanaisempi kuin JSON tai YAML, mutta sen skeemavalidointiominaisuudet tekevät siitä korvaamattoman tilanteissa, joissa datan eheys ja järjestelmien väliset muodolliset sopimukset ovat kriittisiä.
Vertailu rinnakkain
| Ominaisuus | JSON | YAML | CSV | XML |
|---|---|---|---|---|
| Luettavuus | Hyvä | Erinomainen | Hyvä (taulukko) | Kohtalainen |
| Monisanaisuus | Matala | Matala | Erittäin matala | Korkea |
| Kommentit | Ei | Kyllä | Ei | Kyllä |
| Sisäkkäinen data | Kyllä | Kyllä | Ei | Kyllä |
| Tietotyypit | Perus | Rikkaat | Ei (kaikki merkkijonoja) | Skeeman kautta |
| Skeemavalidointi | JSON Schema | Ei standardia | Ei | XSD |
| Tiedostokoko | Pieni | Pieni | Pienin | Suuri |
| Jäsennysnopeus | Nopea | Kohtalainen | Nopea | Kohtalainen |
| Pääkäyttöalue | Web-API:t | DevOps-konfig. | Data/taulukot | Yritykset |
Milloin käyttää mitäkin
- Valitse JSON kun rakennat web-API:ta, tallennat konfiguraatiota JavaScript/TypeScript-projekteihin tai vaihdat dataa palveluiden välillä. Se on oletusvalinta useimpiin nykyaikaisiin sovelluksiin.
- Valitse YAML kun kirjoitat konfiguraatiotiedostoja, joita ihmisten tarvitsee lukea ja muokata usein. Sen luettavuus ja kommenttituki tekevät siitä ihanteellisen DevOps-käyttöön ja infrastructure-as-code-ratkaisuihin.
- Valitse CSV kun työskentelet taulukkodatan kanssa, tuot/viet taulukkolaskennasta tai tietokannoista, tai kun tiedostokoon on oltava minimaalinen. Vältä sitä kaikkeen hierarkkiseen.
- Valitse XML kun työskentelet yritysjärjestelmien, SOAP-API:den tai muodollista skeemavalidointia vaativien tilanteiden kanssa. Se on myös oikea valinta, kun tarvitset dokumenttikeskeistä merkintäkieltä (kuten SVG tai RSS).
Muuntaminen formaattien välillä
Muuntaminen näiden formaattien välillä on yleinen tehtävä. Muutama asia muistettavaksi:
- JSON:sta YAML:iin (ja päinvastoin) on yleensä häviötöntä, koska YAML on JSON:n ylijoukko.
- CSV:stä JSON/YAML:iin toimii hyvin litteälle datalle, mutta vaatii päätöksiä rakenteesta sisäkkäistä tulosta varten.
- XML:stä JSON:iin voi menettää tietoa (attribuutit, nimiavaruudet, järjestys), koska JSON:ssa ei ole vastaavia käsitteitä.
- Mikä tahansa formaatti CSV:ksi toimii vain, jos data on litteää tai voidaan mielekkäästi litistää.
Vinkki. Kun muunnat formaattien välillä, tarkista aina tulos. Automaattiset muunnokset voivat hiljaisesti menettää dataa, erityisesti XML-attribuuttien, YAML-tyyppimuunnosten tai CSV-koodausreunatapausten kohdalla.
Lue lisää
ToolK.io tarjoaa ilmaisia työkaluja JSON:n, YAML:n, CSV:n ja XML:n väliseen muuntamiseen, datan muotoiluun ja validointiin sekä aiheeseen liittyviä oppaita rakenteellisen datan käsittelyyn projekteissasi.
