Jos olet koskaan rakentanut verkkosivuston, kutsunut API:a tai vilkaissut package.json-tiedostoa, olet jo tutustunut JSONiin. Se tarkoittaa JavaScript Object Notation, ja se on käytännössä universaali kieli, jota sovellukset käyttävät kommunikoidakseen keskenään. Älä anna "JavaScript"-sanan hämätä — JSON toimii käytännössä kaikilla ohjelmointikielillä.

Käydään asia läpi selkokielellä, runsailla esimerkeillä höystettynä.

Lyhyt historianoppitunti

Douglas Crockford loi JSONin 2000-luvun alussa. Hän halusi jotain yksinkertaisempaa kuin XML tiedon lähettämiseen selainten ja palvelimien välillä. Idea levisi nopeasti — JSON standardoitiin virallisesti ECMA-404:ksi vuonna 2013 ja myöhemmin RFC 8259:ksi vuonna 2017.

Nykyään yli 90% web-API:ista käyttää JSONia. Se ei ole menossa mihinkään.

Miltä JSON näyttää?

Tässä yksinkertainen esimerkki — JSON-objekti, joka esittää henkilöä:

json

Aika luettavaa, eikö? Siinä koko pointti. Katsotaan säännöt, jotka saavat tämän toimimaan.

Syntaksisäännöt (ne ovat yksinkertaisia, lupaan)

Tietotyypit: JSON tarjoaa kuusi rakennuspalikkaa: merkkijonot (aina lainausmerkeissä), numerot, totuusarvot (true/false), null, objektit ja taulukot. Siinä kaikki — ei päivämääriä, ei funktioita, ei erikoistyyppejä.

Objektit: Nämä ovat avain-arvo-parejasi, käärittyinä aaltosulkeisiin {}. Avainten täytyy olla merkkijonoja lainausmerkeissä. Tässä esimerkki sisäkkäisestä objektista:

json

Taulukot: Järjestettyjä listoja hakasulkeissa []. Ne voivat sisältää mitä tahansa tyyppien yhdistelmiä:

json

Yksi kompastuskivi: JSON ei salli ylimääräisiä pilkkuja lopussa. Joten {"name": "Sam",} rikkoo jäsentimesi. Tämä yllättää monet JavaScriptistä tulevat, jossa ylimääräiset pilkut ovat täysin sallittuja.

Miksi kehittäjät rakastavat JSONia

On muutama syy, miksi JSON voitti dataformaattien sodan:

  • Se on älyttömän yksinkertainen. Vertaa {"name": "Jo"} XML:n Jo:iin. Vähemmän kirjoitettavaa, vähemmän kohinaa.
  • Kaikki kielet tukevat sitä. Pythonissa on json.loads(), JavaScriptissä JSON.parse(), Go:ssa encoding/json — ymmärrät idean. Katso MDN JSON -dokumentaatio JavaScript-puolelle.
  • Se on kevyt. JSON-kuormat ovat tyypillisesti 30-50% pienempiä kuin vastaava XML. Sillä on merkitystä, kun lähetät miljoonia API-vastauksia päivässä.
  • Se vastaa luontevasti koodia. JSON-objekti näyttää lähes identtiseltä Python-sanakirjan, JavaScript-objektin tai Ruby-hashin kanssa. Ei tarvita käännöskerrosta.

Missä löydät JSONin luonnossa

  • Web-API:t: Kutsu melkein mitä tahansa REST API:a ja saat JSONia takaisin. Kokeile itse — avaa selaimesi ja siirry osoitteeseen https://api.github.com/users/octocat. Se on JSONia.
  • Konfiguraatiotiedostot: package.json Node.js:lle, tsconfig.json TypeScriptille, settings.json VS Codelle — JSON on kaikkialla kehittäjätyökaluissa.
  • Tietokannat: MongoDB tallentaa tiedot BSON-muodossa (binäärinen JSON). PostgreSQL tukee natiiveja JSON-saraketyyppejä. Jopa MySQL lisäsi JSON-tuen.
  • Tiedonvaihto: Mikropalvelut kommunikoivat keskenään lähes aina JSONilla HTTP:n yli.

JSON vs XML — Lyhyt versio

XML:llä on yhä paikkansa (lisää siitä XML-artikkelissamme), mutta useimmissa web-kehitystöissä JSON voittaa luettavuudessa, tiedostokoossa ja jäsennynopeudessa. Ainoa alue, jossa XML loistaa? Dokumenttikeskeinen data, jossa on sekasisältöä, skeemoja ja muunnoksia.

JSONin validointi

Pienikin virhe — puuttuva pilkku, ylimääräinen lainausmerkki tai harhaileva ylimääräinen pilkku — aiheuttaa JSON-jäsennyksen täydellisen epäonnistumisen. JSONissa ei ole "osittaista jäsennystä"; se joko toimii tai ei toimi. Siksi työkalut kuten JSON Formatter ja JSON Validator ovat niin käteviä. Liitä JSONisi ja näet heti, onko jotain vialla.

Yleiset JSON-virheet (ja miten ne korjataan)

Vuosien JSON-työskentelyn jälkeen tässä ovat virheet, joita näen kehittäjien tekevän yhä uudelleen:

1. Yksittäiset lainausmerkit kaksinkertaisten sijaan. Tämä on kelvollista JavaScriptiä, mutta EI kelvollista JSONia:

json

2. Ylimääräiset pilkut. JavaScript sallii ne, JSON ei:

json

3. Kommentit. JSONissa ei ole kommenttisyntaksia. Jos tarvitset kommentteja konfiguraatiotiedostoissa, harkitse JSONC:n (JSON with Comments, VS Coden tukema) käyttöä tai vaihda YAML:iin.

4. Lainaamattomat avaimet. JavaScriptissä voit kirjoittaa {name: "Sarah"}, mutta JSONissa jokaisen avaimen täytyy olla lainausmerkeissä oleva merkkijono: {"name": "Sarah"}.

5. undefined:n käyttö. JavaScriptin undefined ei ole olemassa JSONissa. Käytä sen sijaan null.

JSONin käyttö eri ohjelmointikielissä

Yksi JSONin suurimmista vahvuuksista on universaali kielituki. Näin jäsentäminen ja serialisointi näyttää suosituissa kielissä:

javascript
python

Huomaatko miten samankaltaisia API:t ovat? parse/loads lukemiseen, stringify/dumps kirjoittamiseen. Useimmat kielet noudattavat samaa kaavaa.

JSON-suorituskykyvinkit

Kun käsittelet suuria JSON-kuormia, suorituskyvyllä alkaa olla merkitystä. Tässä muutamia käytännön vinkkejä:

  • Minifioi tuotantoa varten. Välilyöntien poistaminen JSONista voi pienentää tiedostokokoa 10-30%. Meidän JSON Minifier tekee tämän yhdellä klikkauksella.
  • Käytä virtausjäsentimiä suurille tiedostoille. Jos JSON-tiedostosi on satoja megatavuja, älä lataa sitä kokonaan muistiin. Kirjastot kuten JSONStream (Node.js) tai ijson (Python) jäsentävät asteittain.
  • Vältä syvästi sisäkkäisiä rakenteita. Jokainen sisäkkäisyyden taso lisää jäsennyksen kuormitusta. Jos huomaat sisäkkäistäväsi yli 4-5 tasoa syvälle, harkitse tietomallin madaltamista.
  • Harkitse binäärisiä vaihtoehtoja äärimmäisissä tapauksissa. Erittäin suuren läpimenon järjestelmissä formaatit kuten MessagePack, BSON tai Protocol Buffers voivat tarjota 2-5x pienempiä kuormia ja nopeampaa jäsennystä. Mutta menetät ihmisluettavuuden, joten tämä on kompromissi.

JSON todellisessa API-suunnittelussa

Katsotaan miten oikeat API:t rakentavat JSON-vastauksensa. Tässä yleinen malli sivutetuille API-vastauksille:

json

Ja tässä yleinen virhevastauksen malli:

json

Nämä mallit ovat niin yleisiä, että näet ne lähes jokaisessa hyvin suunnitellussa REST API:ssa. Tällaisten käytäntöjen noudattaminen tekee API:stasi helpommin ymmärrettävän muille kehittäjille.

JSON-pikaopas

Tässä lunttilappu kaikesta, mitä voit laittaa JSON-dokumenttiin:

TyyppiEsimerkkiHuomautukset
String"hello"Täytyy käyttää lainausmerkkejä
Number42, 3.14, -1, 2.5e10Ei etunollia, ei heksa
Booleantrue, falseVain pienaakkosia
NullnullVain pienaakkosia
Object{"key": "value"}Avainten täytyy olla lainausmerkeissä olevia merkkijonoja
Array[1, 2, 3]Voi sekoittaa tyyppejä

Kokeile itse

Valmis soveltamaan tätä tietoa? Tässä työkalut, jotka kannattaa lisätä kirjanmerkkeihin:

  • JSON Formatter — Liitä sotkuinen JSON ja saat sen kauniisti muotoiltuna oikeilla sisennyksillä.
  • JSON Validator — Tarkista nopeasti onko JSONisi syntaktisesti oikein ja saa selkeät virheilmoitukset kun se ei ole.
  • JSON Minifier — Poista välilyönnit JSONistasi tuotantokuormia varten.

JSON saattaa näyttää yksinkertaiselta pinnalta, mutta sen oikkujen ja parhaiden käytäntöjen hallitseminen säästää sinulta lukemattomia tunteja debuggausta. Nyt mene ja rakenna jotain hienoa!