JSON

JSON () on yksinkertainen ja kevyt avoimen standardin tiedostomuoto tiedonvälitykseen ja tallennukseen. Ihmisten on helppo lukea ja kirjoittaa JSON tiedostoja.  JSON perustuu JavaScript-ohjelmointikielistandardin ECMA-262 3. painos – joulukuu 1999 osajoukkoon. Nimestään ja JavaScript-perustastaan huolimatta JSON on täysin kielestä riippumaton, mutta käyttää käytäntöjä, jotka ovat tuttuja C-kieliperheestä. Nämä ominaisuudet tekevät JSON:ista erinomaisen tiedonsiirtokielen. Useimmat ohjelmointikielet sisältävät koodin JSON-muotoisen datan luomiseksi ja parsimiseksi. JSONin Internet media type on application/json ja sen tiedostopääte .json.

JSON perustuu järjestämättömään joukkoon avain/arvo-pareja. Objekti alkaa vasemmalla aaltosulkeella "{" ja päättyy oikeaan aaltosulkeeseen "}". Jokainen avain ympäröidään lainausmerkeillä, ja sit seuraa kaksoispiste ":". Nimi/arvo-parit erotetaan pilkuilla "," toisistaan. JSONI:a käytetään yleisesti tiedon siirtämiseen verkkosovelluksissa (esim. joidenkin tietojen lähettäminen palvelimelta asiakkaalle, jotta se voidaan näyttää verkkosivulla tai päinvastoin. JSON muistuttaa hyvin paljon JavaScriptin objektimuotoa. 

JSON-formaatin määritteli alun perin Douglas Crockford vuoden 2000 alussa. Crockford ja Chip Morningstar lähettivät ensimmäisen JSON-viestin huhtikuussa 2001. JSON luotiin vaihtoehdoksi XML:lle, joka oli aikoinaan hallitseva tiedonvaihdon muoto. XML-tiedostojen lukeminen on ihmiselle vaikeaa ja se jättää paljon toivomisen varaa koodauksen ketteryyden suhteen. JSON oli vastaus näihin ongelmiin.

Esimerkki
Esimerkki kuvitellun henkilön JSON-tiedostosta:
{
    "etunimi": "Mari",
    "sukunimi": "Kuusirinne",
    "ikä": 27,
    "osoite": {
        "kadun_osoite": "Kirkkokatu 15",
        "kaupunki": "Oulu",
        "maakunta": "Kainuun maakunta",
        "postinumero": "90150"
    },
    "puhelin_numerot": [
        {
            "tyyppi": "työ",
            "numero": "0451231233"
        },
        {
            "tyyppi": "koti",
            "numero": "0503285815"
        }
    ],
    "on_eläkkeellä": false
}

Tuetut tietomuodot 
Numero: etumerkillinen desimaaliluku, joka voi sisältää murto-osan ja voi käyttää eksponentiaalista E-merkintää, mutta ei voi sisältää ei-lukuja, kuten NaN. Muoto ei tee eroa kokonaislukujen ja liukulukujen välillä. JavaScript käyttää IEEE-754-kaksoistarkkuutta liukulukumuotoa kaikissa numeerisissa arvoissaan, mutta muut JSON:ia käyttävät kielet voivat koodata numeroita eri tavalla.

Merkkijono: nollan tai useamman Unicode-merkin sarja. Merkkijonot on rajattu lainausmerkeillä, ja ne tukevat kenoviivaa.

Boolean arvo: joko tosi (true) tai epätosi (false).

Taulukko: järjestetty luettelo nollasta tai useammasta elementistä, joista jokainen voi olla mitä tahansa tyyppiä. Taulukot käyttävät hakasulkeita "[]" ja elementit erotetaan pilkuilla toisistaan.

Objekti: kokoelma nimi-arvo-pareja, joissa nimet (kutsutaan myös avaimiksi) ovat merkkijonoja. Nykyinen ECMA-standardi sanoo: "JSON-syntaksi ei aseta mitään rajoituksia niminä käytettäville merkkijonoille, ei vaadi nimimerkkijonojen olevan yksilöllisiä, eikä anna mitään merkitystä nimi/arvo-parien järjestykselle. Objektit erotetaan aalto sulkeilla "{}" ja nimi/arvoparit erotetaan pilkuilla. Kussakin nimi/arvo-parissa kaksoispiste ":" erottaa avaimen tai nimen sen arvosta.

null: tyhjä arvo sanalla null.

Standardit 
JSON:ia koskevia standardointidokumentteja:
 
 ECMAScript 262, kappale 15.12
 ECMA 404
  (korjaus versioon )

Muihin tiedostomuotoihin vertaaminen 
JSON tunnetaan XML:ää kevyempänä vaihtoehtona. Molemmilla tiedostomuodoilla on laaja tuki luomiseen, lukemiseen ja purkamiseen todellisissa tilanteissa, joissa niitä yleisesti käytetään. XML:n lisäksi muita esimerkkejä voivat olla CSV ja YAML (JSON-superjoukko). Myös Googlen Protocol Bufferit voivat täyttää tämän roolin, vaikka ne eivät olekaan tiedonsiirtokieltä.

YAML 
YAML-versio 1.2 on JSONin superjoukkko; aiemmat versiot eivät olleet täysin yhteensopivia. Esimerkiksi etukenon / pystyy sulkemaan takakenolla \ JSON tiedostomuodossa, mutta YAML ei tukenut tätä. YAML tukee kommentointia, kun taas JSON ei.

XML 
XML:ää on käytetty strukturoidun tiedon kuvaamiseen ja objektien sarjallistamiseen. Monia XML-pohjaisia protokollia on luotu edustamaan samanlaisia tietorakenteita kuin JSON, joita käytetään samanlaisiin tiedonvaihto tarkoituksiin. Dataa voidaan koodata XML-muotoon usealla tavalla. Laajennettavin muoto jossa käytetään tagi pareja tuottaa paljon suuremman tiedoston (merkkimäärällisesti) kuin JSON, mutta jos tiedot tallennetaan attribuuteissa ja 'lyhyt tagi' muodossa, jossa sulkemis tagi korvataan />:lla, tiedostosta tulee yhtä pitkä tai hieman pidempi kuin vastaavasta JSON tiedostosta. XML-attribuutilla voi kuitenkin olla vain yksi arvo, ja jokainen attribuutti voi esiintyä enintään kerran kussakin elementissä.

XML erottaa "datan" "metadatasta" (elementtien ja attribuuttien avulla), kun taas JSONissa ei ole samanlaista käsitettä.

Toinen keskeinen ero on arvojen osoittamisessa. JSON:ssa on objekteja, joissa on yksinkertainen "avain" ja "arvo" -kartoitus, kun taas XML-osoitteiden määrittäminen tapahtuu "Solmuissa", jotka kaikki saavat yksilöllisen ID:n XML-prosessorin kautta. Lisäksi XML-standardi määrittelee yhteisen atribuutin xml:id, jota käyttäjä voi käyttää täsmällisen ID:n antamiseen.

Katso myös
 JSON Web Token
 YAML
 Ajax
 XML

Lähteet

Aiheesta muualla
 The JSON Specification
 Yleistä JSON:sta suomeksi
 Parsing JSON is a Minefield 
 JSON Schema (englanniksi)

Formaalit kielet
Tiedostomuodot
Seulonnan keskeiset artikkelit
Avoimet standardit