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öä:
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:
Taulukot: Järjestettyjä listoja hakasulkeissa []. Ne voivat sisältää mitä tahansa tyyppien yhdistelmiä:
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:nJo:iin. Vähemmän kirjoitettavaa, vähemmän kohinaa. - Kaikki kielet tukevat sitä. Pythonissa on
json.loads(), JavaScriptissäJSON.parse(), Go:ssaencoding/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.jsonNode.js:lle,tsconfig.jsonTypeScriptille,settings.jsonVS 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:
2. Ylimääräiset pilkut. JavaScript sallii ne, JSON ei:
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ä:
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) taiijson(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:
Ja tässä yleinen virhevastauksen malli:
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:
| Tyyppi | Esimerkki | Huomautukset |
| String | "hello" | Täytyy käyttää lainausmerkkejä |
| Number | 42, 3.14, -1, 2.5e10 | Ei etunollia, ei heksa |
| Boolean | true, false | Vain pienaakkosia |
| Null | null | Vain 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!