Pojdi na vsebino

JSON

Iz Wikipedije, proste enciklopedije
JavaScript Object Notation
Logotip JSON je Möbiusov trak.
Logotip JSON je Möbiusov trak.
Datotečna pripona
.json
Internetna vrsta medija
application/json
Type codeTEXT
Enotni identifikator vrste (UTI)public.json
Tip formataizmenjava podatkov
Razširjeno izJavaScript
StandardSTD 90 (RFC 8259), ECMA-404, ISO/IEC 21778:2017
Open format?da
Spletna stranjson.org

JSON (JavaScript Object Notation[a]   objektni zapis JavaScript) [jsón] je datotečni format in format za izmenjavo podatkov odprtega standarda, ki uporablja človeku berljivo besedilo za shranjevanje in prenašanje podatkovnih objektov, sestavljenih iz parov ime-vrednost in polj (ali drugih serializiranih vrednosti). Je pogosto uporabljen podatkovni format z različnimi uporabami v elektronski izmenjavi podatkov, vključujoč spletne aplikacije in strežnike.

JSON je od programskega jezika neodvisni podatkovni format. Izpeljan je bil iz JavaScripta, vendar mnogi moderni programski jeziki vključujejo kodo za ustvarjanje in razčlenjevanje podatkov v formatu JSON. Imena datotek JSON uporabljajo pripono .json.

Douglas Crockford je izvirno določil format JSON v začetku 2000-ih.[1] Oni[b] in Chip Morningstar so prvo sporočilo JSON poslali aprila 2001.

Poimenovanje in izgovorjava

[uredi | uredi kodo]

Mednarodni standard iz leta 2017 (ECMA-404 in ISO/IEC 21778:2017) določa, da se »JSON« »izgovarja /ˈ.sən/, kot v 'Jazon (Jason) in argonavti'«.[2][3] Prva izdaja (2013) standarda ECMA-404 ni obravnavala izgovorjave.[4] Crockford je leta 2011 dejal: »Veliko je razprav o tem, kako to izgovorite, ampak me to absolutno ne zanima.«[1] /ˈˌsɒn/ je še ena pogosta izgovorjava.[5]

Standardi

[uredi | uredi kodo]

Potem ko je bil RFC 4627 na voljo kot njegova »informativna« specifikacija od leta 2006, je bil JSON prvič standardiziran leta 2013 kot ECMA-404.[4] RFC 8259, objavljen leta 2017, je trenutna različica internetnega standarda STD 90 in ostaja skladen z ECMA-404.[6] Istega leta je bil JSON standardiziran tudi kot ISO/IEC 21778:2017.[2] Standarda ECMA in ISO/IEC opisujeta le dovoljeno skladnjo, medtem ko RFC zajema nekatere varnostne in interoperabilnostne vidike.[7]

Zgodovina

[uredi | uredi kodo]
Image
Douglas Crockford na Yahoo Building leta 2007

JSON je nastal iz potrebe po komunikacijskem protokolumed strežnikom in brskalnikom v realnem času brez uporabe vtičnikov brskalnika, kot sta Flash ali java apleti, prevladujočih metod, ki so se uporabljale v zgodnjih 2000-ih.[8]

Crockford je prvi določil in populariziral format JSON.[1] Akronim je nastal v podjetju State Software, ki so ga soustanovili Crockford in drugi, marca 2001. Soustanovitelji so se dogovorili, da bodo zgradili sistem, ki bo uporabljal standardne zmogljivosti brskalnika in zagotavljal abstrakcijsko plast za spletne razvijalce za ustvarjanje spletnih aplikacij z ohranjanjem stanja, ki bodo imele trajno dupleksno povezavo s spletnim strežnikom, tako da bosta odprti dve povezavi HTTP in bodo reciklirane pred standardnimi časovnimi omejitvami brskalnika, če ne bodo izmenjani nadaljnji podatki. Soustanovitelji so imeli okroglo mizo in glasovali o tem, ali naj se podatkovni format imenuje JSML (JavaScript Markup Language) ali JSON (JavaScript Object Notation), pa tudi pod kakšno vrsto licence naj bo na voljo. Spletna stran JSON.org[9] je začela delovati leta 2001. Decembra 2005 je Yahoo! je začel ponujati nekatere svoje spletne storitve v JSON.[10]

Predhodnik knjižnic JSON je bil uporabljen v projektu otroške igre za trgovanje z digitalnimi sredstvi z imenom Cartoon Orbit na Communities.com, ki je uporabljal stranski vtičnik brskalnika z lastniškim formatom sporočil za manipulacijo elementov DHTML. Po odkritju zgodnjih zmogljivosti Ajaxa so digiGroups, Noosh in drugi uporabili okvirje za posredovanje informacij v vidno polje uporabnikovega brskalnika brez osveževanja vizualnega konteksta spletne aplikacije, s čimer so ustvarili bogate spletne aplikacije v realnem času z uporabo le standardnih zmogljivosti HTTP, HTML in JavaScript iz brskalnikov Netscape 4.0.5+ in Internet Explorer 5+. Crockford je nato ugotovil, da bi se JavaScript lahko uporabljal kot objektno usmerjena oblika sporočil za tak sistem. Sistem je bil prodan podjetjem Sun Microsystems, Amazon.com in EDS.

JSON je temeljil na podmnožici skriptnega jezika JavaScript (natančneje na standardu ECMA-262, 3. izdaja – december 1999[11]) in se pogosto uporablja z JavaScriptom, vendar je od jezika neodvisni podatkovni format. Koda za razčlenjevanje in ustvarjanje podatkov JSON je na voljo v mnogih programskih jezikih. Spletna stran JSON navaja knjižnice JSON po jezikih.

Oktobra 2013 je Ecma International objavila prvo izdajo svojega standarda JSON ECMA-404.[4] Istega leta je RFC 7158 uporabil ECMA-404 kot referenco. Leta 2014 je RFC 7159 postal glavna referenca za internetno uporabo JSON-a in nadomestil RFC 4627 in RFC 7158 (vendar je ECMA-262 in ECMA-404 ohranil kot glavni referenci). Novembra 2017 je ISO/IEC JTC 1/SC 22 objavil ISO/IEC 21778:2017[2] kot mednarodni standard. 13. decembra 2017 je Projektna skupina za internetno inženirstvo (Internet Engineering Task Force, IETF) z objavo RFC 8259, ki je trenutna različica Internetnega standarda STD 90, razveljavila RFC 7159.[6]

Crockford je licenci JSON dodal klavzulo, v kateri je zapisano: »Programska oprema se uporablja za dobro, ne za zlo«, da bi knjižnice JSON odkril kot odprtokodne, hkrati pa se je posmehoval korporativnim odvetnikom in tistim, ki so pretirano pedantni. Po drugi strani pa je ta klavzula povzročila težave z licenčno združljivostjo JSON z drugimi odprtokodnimi licencami, saj odprtokodna in prosta programska oprema običajno ne pomenita nobenih omejitev glede namena uporabe.[12]

Skladnja

[uredi | uredi kodo]

Naslednji primer prikazuje možno predstavitev JSON, ki opisuje osebo.

{
  "first_name": "John",
  "last_name": "Smith",
  "is_alive": true,
  "age": 27,
  "address": {
    "street_address": "21 2nd Street",
    "city": "New York",
    "state": "NY",
    "postal_code": "10021-3100"
  },
  "phone_numbers": [
    {
      "type": "home",
      "number": "212 555-1234"
    },
    {
      "type": "office",
      "number": "646 555-4567"
    }
  ],
  "children": [
    "Catherine",
    "Thomas",
    "Trevor"
  ],
  "spouse": null
}

Kodiranje znakov

[uredi | uredi kodo]

Čeprav je Crockford prvotno trdil, da je JSON stroga podmnožica JavaScripta in ECMAScripta,[13] njuna specifikacija dejansko dovoljuje veljavne dokumente JSON, ki niso veljaven JavaScript   JSON dovoljuje, da se znaka za zaključek vrstice U+2028 VRSTIČNI LOČILNIK in U+2029 ODSTAVČNI LOČILNIK v narekovajih pojavita brez ubežnih znakov, medtem ko ECMAScript 2018 in starejši ne.[14][15] To je posledica dejstva, da JSON ne dovoljuje samo »nadzornih znakov«. Za največjo prenosljivost so ti znaki ubežni s povratno (levo) poševnico.

Izmenjava JSON v odprtem ekosistemu mora biti kodirana v UTF-8.[6] Kodiranje podpira celoten nabor znakov Unicode, vključno z znaki zunaj osnovne večjezične ravnine (U+0000 do U+FFFF). Če pa so ti znaki ubežni, morajo biti zapisani z nadomestnimi pari UTF-16. Na primer, če se želi v JSON vključiti znak emodži U+1F610 😐 NEVTRALNI OBRAZ:

{ "face": "😐" }

Ali:

{ "face": "\uD83D\uDE10" }

JSON je postal stroga podmnožica jezika ECMAScript od revizije jezika leta 2019.[15][16]

Podatkovni tipi

[uredi | uredi kodo]

Osnovni podatkovni tipi JSON so:

  • število: predznačeno desetiško število, ki lahko vsebuje ulomek in uporablja eksponentni zapis E, vendar ne more vključevati neštevilskih vrednosti, kot je NaN. Format ne razlikuje med celim številom in številom s plavajočo vejico. JavaScript uporablja format s plavajočo vejico dvojne točnosti IEEE-754 za vse svoje numerične vrednosti (kasneje podpira tudi BigInt[17]), vendar lahko drugi jeziki, ki implementirajo JSON, števila kodirajo drugače.
  • znakovni niz: zaporedje nič ali več znakov Unicode. Znakovni nizi so ločeni z dvojnimi narekovaji in podpirajo poševnično ubežno skladnjo.
  • Boolov: ena od vrednosti true ali false
  • polje: urejeni seznam nič ali več elementov, od katerih je lahko vsak poljubnega tipa. Polja uporabljajo zapis v oglatih oklepajih z elementi, ločenimi z vejicami.
  • objekt: zbirka parov ime-vrednost, kjer so imena (imenovana tudi ključi) znakovni nizi. Trenutni standard ECMA pravi: »Skladnja JSON ne nalaga nobenih omejitev znakovnim nizom, ki se uporabljajo kot imena, ne zahteva, da so znakovni nizi imen enolični, in ne pripisuje nobenega pomena vrstnemu redu parov ime/vrednost.«[18] Objekti so ločeni z zavitimi oklepaji, pari pa se ločujejo z vejicami, znotraj vsakega para dvopičje »:« ločuje ključ ali ime od njegove vrednosti.
  • null: prazna vrednost z uporabo besede null

Presledki so dovoljeni in prezrti okrog ali med skladenjskimi elementi (vrednosti in ločila, ne pa znotraj vrednosti znakovnega niza). Za presledke se v ta namen štejejo štirje specifični znaki: presledek, vodoravni tabulator, pomik v novo vrstico in pomik na začetek vrstice. Zlasti oznaka vrstnega reda bajtov ne sme biti ustvarjena s skladno implementacijo (čeprav je lahko sprejeta pri razčlenjevanju JSON). JSON ne ponuja skladnje za komentarje.[19]

Zgodnje različice JSON (kot so določene v RFC 4627) so zahtevale, da mora veljavno besedilo JSON vsebovati samo objekt ali tip polja, ki lahko vsebujeta druge tipe znotraj sebe. Ta omejitev je bila opuščena v RFC 7158, kjer je bilo besedilo JSON na novo definirano kot poljubna serializirana vrednost.

Števila v JSON so agnostična glede njihove predstavitve v programskih jezikih. Čeprav to omogoča serializiranje števil poljubne točnosti, lahko povzroči težave s prenosljivostjo. Ker na primer ni razlikovanja med celoštevilskimi in plavajočimi vrednostmi, lahko nekatere implementacije obravnavajo 42, 42.0, and 4.2E+1 kot isto število, druge pa ne. Standard JSON ne postavlja zahtev glede podrobnosti implementacije, kot so prekoračitev, podkoračitev, izguba točnosti, zaokroževanje ali predznačene ničle, vendar priporoča, da se za »dobro interoperabilnost« ne pričakuje več kot točnost IEEE 754 binary64. Pri serializiranju dvojiške predstavitve števila s plavajočo vejico na ravni stroja (kot je binary64) v človeku berljivo desetiško predstavitev (kot so števila v JSON) in nazaj ni inherentne izgube točnosti   obstajajo objavljeni algoritmi za točno in optimalno izvedbo te pretvorbe.[20]

Komentarji so bili namerno izključeni iz JSON. Leta 2012 je Crockford njihovo odločitev o zasnovi opisal takole: »Odstranil sem komentarje iz JSON-a, ker sem videl, da jih ljudje uporabljajo za shranjevanje ukazov za razčlenjevanje, kar bi uničilo interoperabilnost.«[19]

JSON ne dovoljuje »zaključnih vejic«   vejice za zadnjo vrednostjo znotraj podatkovne strukture.[21] Zaključne vejice so pogosta značilnost izpeljank JSON za izboljšanje enostavnosti uporabe.[22]

Interoperabilnost

[uredi | uredi kodo]

RFC 8259 opisuje nekatere vidike skladnje JSON, ki so sicer dovoljeni v skladu s specifikacijami, vendar lahko povzročijo težave z interoperabilnostjo.

  • nekatere implementacije JSON sprejemajo samo besedila JSON, ki predstavljajo objekt ali polje. Zaradi interoperabilnosti bi morale aplikacije, ki si izmenjujejo JSON, prenašati sporočila, ki so objekti ali polja.
  • specifikacije dovoljujejo objekte JSON, ki vsebujejo več članov z istim imenom. Obnašanje implementacij, ki obdelujejo objekte s podvojenimi imeni, je nepredvidljivo. Zaradi interoperabilnosti se morajo aplikacije pri prenosu objektov JSON izogibati podvojenim imenom.
  • specifikacije izrecno določajo, da vrstni red članov v objektih JSON ni pomemben. Zaradi interoperabilnosti se morajo aplikacije izogibati dodeljevanju pomena vrstnemu redu članov, tudi če programska oprema za razčlenjevanje ta vrstni red naredi vidnega.
  • čeprav specifikacije ne omejujejo velikosti ali točnosti številskih literalov JSON, jih pogosto uporabljena implementacija JavaScript shranjuje kot količine IEEE754 »binary64«. Zaradi interoperabilnosti se morajo aplikacije izogibati prenosu števil, ki jih ni mogoče predstaviti na ta način, na primer 1E400 ali 3,141592653589793238462643383279.
  • čeprav specifikacije ne omejujejo kodiranja znakov Unicode v besedilu JSON, velika večina implementacij predvideva kodiranje UTF-8   zaradi interoperabilnosti bi morale aplikacije sporočila JSON vedno in samo kodirati v UTF-8.
  • specifikacije ne prepovedujejo prenosa zaporedij bajtov, ki nepravilno predstavljajo znake Unicode. Zaradi interoperabilnosti bi morale aplikacije prenašati sporočila, ki ne vsebujejo takšnih zaporedij bajtov.
  • specifikacija ne omejuje načina, kako aplikacije primerjajo znakovne nize Unicode. Zaradi interoperabilnosti bi morale aplikacije takšne primerjave vedno izvajati po posameznih kodnih enotah.

Leta 2015 je IETF objavila RFC 7493, ki opisuje »format sporočila I-JSON«, omejeni profil JSON, ki omejuje skladnjo in obdelavo JSON, da bi se čim bolj izognilo tem težavam z interoperabilnostjo.

Semantika

[uredi | uredi kodo]

Čeprav JSON zagotavlja skladenjski okvir za izmenjavo podatkov, nedvoumna izmenjava podatkov zahteva tudi dogovor med proizvajalcem in potrošnikom o semantiki specifične rabe skladnje JSON.[23] Zgled, kjer je tak dogovor potreben, je serializacija podatkovnih tipov, ki niso del standarda JSON, na primer datumi in regularni izrazi.

Metapodatki in shema

[uredi | uredi kodo]

Uradni tip MIME za besedilo JSON je application/json,[24] in večina sodobnih implementacij ga je sprejela. Med starejše tipe MIME spadajo text/json, text/x-json in text/javascript.[25] Standardna pripona imena datoteke je .json.[26]

Shema JSON določa format, temelječ na JSON, za definiranje strukture podatkov JSON za validacijo, dokumentacijo in nadzor interakcije. Zagotavlja pogodbo za podatke JSON, ki jih zahteva določena aplikacija, in kako je te podatke mogoče spremeniti.[27] Shema JSON temelji na konceptih iz XML Schema (XSD), vendar temelji na JSON. Tako kot pri XSD se lahko ista orodja za serializacijo/deserializacijo uporabljajo tako za shemo kot za podatke in je samoopisna. Določena je v Internet Draftu pri IETF, pri čemer je najnovejša različica iz leta 2024 »Draft 2020-12«.[28] Za različne programske jezike je na voljo več validatorjev,[29] vsak z različnimi stopnjami skladnosti.

Standard JSON ne podpira referenc na objekte, vendar obstaja osnutek standarda IETF za reference na objekte, ki temeljijo na JSON.[30]

Uporabe

[uredi | uredi kodo]

JSON-RPC je protokol za oddaljeno proženje procedur (RPC), zgrajen na JSON-u kot nadomestilo za XML-RPC ali SOAP. Gre za preprost protokol, ki definira le peščico podatkovnih tipov in ukazov. JSON-RPC omogoča sistemu pošiljanje obvestil (informacij strežniku, ki ne zahtevajo odgovora) in mnogokratnih klicev strežniku, na katere je mogoče odgovoriti zunaj vrstnega reda.

Asinhroni JavaScript in JSON (ali AJAJ) se nanašata na isto metodologijo dinamičnih spletnih strani kot Ajax, le da se namesto XML uporablja podatkovni format JSON. AJAJ je tehnika spletnega razvoja, ki spletni strani omogoča, da po nalaganju v spletni brskalnik zahteva nove podatke. Običajno s strežnika prikaže nove podatke kot odgovor na uporabnikova dejanja na tej spletni strani. Na primer, kar uporabnik vnese v iskalno polje, odjemalska koda nato pošlje strežniku, ki takoj odgovori s spustnim seznamom ustreznih elementov podatkovne zbirke.

JSON se je kot konfiguracijski jezik uporabljal ad hoc. Vendar pa ne podpira komentarjev. Leta 2012 je Crockford, ustvarjalec JSON-a, o komentarjih v JSON-u, ko se uporablja kot konfiguracijski jezik, povedal naslednje: »Vem, da pomanjkanje komentarjev nekatere ljudi žalosti, vendar ne bi smelo. Recimo, da uporabljate JSON za shranjevanje konfiguracijskih datotek, ki jih želite označiti. Kar vstavite vse komentarje, ki jih želite. Nato jih posredujte razčlenjevalniku JSON prek JSMin[31][19]

MongoDB za svojo dokumentno usmerjeno podatkovno zbirko uporablja podatke, podobne JSON-u.

Nekatere relacijske podatkovne zbirke imajo dodano podporo za izvorne podatkovne tipe JSON, kot sta JSONB v PostgreSQL[32] in JSON v MySQL.[33] To razvijalcem omogoča neposredno vstavljanje podatkov JSON, ne da bi jih morali pretvoriti v drugo obliko.

Varnost

[uredi | uredi kodo]

Ker je JSON podmnožica JavaScripta, lahko pride do napačnega prepričanja, da je varno posredovati besedila JSON funkciji JavaScript eval(). To ni varno, saj nekatera veljavna besedila JSON, zlasti tista, ki vsebujejo U+2028 VRSTIČNO LOČILO ali U+2029 ODSTAVČNO LOČILO, niso veljavna koda JavaScript, dokler specifikacije JavaScripta niso bile posodobljene leta 2019 in tako starejši pogoni morda ne podpirajo te kode.[14] Da bi se izognili mnogim pastem, ki jih povzroča izvajanje poljubne kode z interneta, je bila v peto izdajo ECMAScripta najprej dodana nova funkcija JSON.parse(),[34] ki jo od leta 2017 podpirajo vsi večji brskalniki. Za nepodprte brskalnike Crockford zagotavlja knjižnico JavaScript, združljivo z API-jem.[35] Poleg tega je predlog TC39 »Subsume JSON« od revizije jezika leta 2019 ECMAScript uvrstil v strogo supermnožico JSON.[15][16] Različne implementacije razčlenjevalnikov JSON so utrpele težave z napadi za zavrnitev storitev in ranljivostjo množičnega dodeljevanja.[36][37]

Alternative

[uredi | uredi kodo]

JSON se promovira kot nizkoproračunska alternativa XML-u, saj imata oba formata široko podporo za ustvarjanje, branje in dekodiranje v resničnih situacijah, kjer se pogosto uporabljata.[38] Glede na specifičen primer uporabe alternative JSON vključujejo:

  • za besedilne formate, CSV in supermnožice JSON (glej spodaj). Ion ponuja tudi besedilni format, ki je supermnožica JSON (širši nabor primarnih tipov, opomb, komentarjev in omogočanje zaključnih vejic).[39]
  • za hitrejšo obdelavo na račun človeške berljivosti so med formati izmenjave podatkov, ki lahko izražajo vse objekte JSON, CBOR (standard IETF RFC) in dvojiški Ion.[39] Tudi Googlov Protocol Buffers lahko zapolni to nišo zaradi možnosti razčlenjevanja brez sheme, vendar ni namenjen kot izmenjevalni jezik. Poleg tega imajo podatkovne zbirke, kot sta SQLite in PostgreSQL, svoje lastne notranje dvojiške predstavitve, imenovane »JSONB«, ki niso namenjene zunanji uporabi.[40]
Glavni članek: XML.

XML se uporablja za opis strukturiranih podatkov in serializacijo objektov. Obstajajo različni protokoli, temelječi na XML, ki predstavljajo isto vrsto podatkovnih struktur kot JSON za isto vrsto izmenjave podatkov. Podatke je mogoče v XML kodirati na več načinov. Najobsežnejša oblika z uporabo parov oznak ima za posledico veliko večjo (po številu znakov) predstavitev kot JSON, če pa so podatki shranjeni v atributih in obliki kratkih oznak, kjer je zaključna oznaka zamenjana z />, je predstavitev pogosto približno enake velikosti kot JSON ali le malo večja.[41] Vendar ima lahko atribut XML samo eno vrednost in vsak atribut se lahko na vsakem elementu pojavi največ enkrat.

XML ločuje podatke od metapodatkov (z uporabo elementov in atributov), medtem ko JSON nima takšnega koncepta.

Druga ključna razlika je naslavljanje vrednosti. JSON ima objekte s preprostim preslikavanjem ključa v vrednost, medtem ko se v XML naslavljanje dogaja na vozliščih, od katerih vsako prejme edinstven ID prek procesorja XML. Poleg tega standard XML definira skupni atribut xml:id, ki ga lahko uporabnik uporabi za eksplicitno nastavitev ID-ja.

Imena oznak XML ne smejo vsebovati nobenega od znakov !"#$%&'()*+,/;<=>?@[\]^`{|}~, niti presledka, in se ne smejo začeti z -, . ali številsko števko, medtem ko se ključi JSON lahko (tudi če morata biti narekovaj in poševnica ubežna).[42]

Vrednosti XML so znakovni nizi znakov brez vgrajene tipske varnosti. XML ima koncept sheme, ki dovoljuje močno tipiziranje, uporabniško definirane tipe, vnaprej definirane oznake in formalno strukturo, kar omogoča formalno validacijo toka XML. JSON ima vgrajenih več tipov in podoben koncept sheme v shemi JSON.

XML podpira komentarje, medtem ko JSON ne.[43][19]

Glavni članek: TOML.

TOML (»Tom's Obvious, Minimal Language« (prvotno »Tom's Own Markup Language«))[44] je datotečni format za konfiguracijske datoteke.[45] Zasnovan je tako, da ga je enostavno brati in pisati, saj je minimalističen (za razliko od bolj kompleksnega YAML) in uporablja človeku berljivo skladnjo. Projekt standardizira implementacijo vseprisotnega formata datoteke INI (ki ga je v veliki meri nadomestil) in odpravlja dvoumnost pri njegovi interpretaciji.

Supermnožice

[uredi | uredi kodo]

Podpora za komentarje in druge funkcije se je izkazala za koristno, kar je privedlo do ustvarjanja več nestandardnih supermnožic JSON. Med njimi so HJSON,[46] HOCON in JSON5 (ki kljub svojemu imenu ni peta različica JSON).[47][48]

YAML različice 1.2 je supermnožica JSON   prejšnje različice niso bile strogo združljive. Na primer, zamenjava ubežnega znaka (desne) poševnice / s povratno (levo) poševnico \ je veljavna v JSON, ni pa bila veljavna v YAML.[49] YAML podpira komentarje, JSON pa ne.[49][47][19]

CSONCoffeeScript Object Notation«) uporablja pomembno zamikanje in tipke brez narekovajev ter predpostavlja deklaracijo zunanjega objekta. Uporabljen je bil za konfiguriranje urejevalnika besedil Atom na GitHubu.[50][51][52]

Obstaja tudi nepovezan projekt z imenom CSON (»Cursive Script Object Notation«), ki je skladenjsko bolj podoben JSON-u.[53]

HOCON

[uredi | uredi kodo]

HOCON (»Human-Optimized Config Object Notation«) je format za človeku berljive podatke in supermnožica JSON.[54] Uporabe HOCON so:

  • uporablja se večinoma skupaj s spletnim ogrodjem Play Framework,[55] in ga je razvilo podjetje Lightbend.
  • podprt je tudi kot konfiguracijski format za projekte .NET prek Akka.NET[56][57] in Puppet.[58]
  • TIBCO Streaming:[59] HOCON je primarna oblika konfiguracijske datoteke za družino izdelkov TIBCO Streaming[60] (StreamBase, LiveView in Artifact Management Server) od različice TIBCO Streaming Release 10.[61]
  • je tudi primarna oblika konfiguracijske datoteke za več podsistemov programa Exabeam Advanced Analytics.[62]
  • Jitsi ga uporablja kot »nov« konfiguracijski sistem in za datoteke s priponami .properties kot rezervno možnost.[63][64]

JSON5

[uredi | uredi kodo]

JSON5 (»JSON5 Data Interchange Format«) je razširitev skladnje JSON, ki je, tako kot JSON, tudi veljavna skladnja JavaScript. Specifikacija se je začela leta 2012 in končala leta 2018 z različico 1.0.0.[65] Glavne razlike v primerjavi s skladnjo JSON so:

  • neobvezne zaključne vejice
  • nenarekovani objektni ključi
  • enojni narekovaji in mnogovrstični znakovni nizi
  • dodatne oblike zapisa števil
  • komentarji

Skladnja JSON5 je podprta v nekaterih programskih opremah kot razširitev skladnje JSON, na primer v prostem in odprtokodnem relacijskem pogonu podatkovne zbirke SQLite.[66]

JSONC

[uredi | uredi kodo]

JSONC (JSON with Comments) je podmnožica JSON5, ki se uporablja v Microsoftovem integriranem razvojnem okolju Visual Studio Code:[67][68]

  • podpira enovrstične komentarje (//) in blokovne komentarje (/* */)[69]
  • sprejema zaključne vejice, vendar se jih ne priporoča in urejevalnik bo prikazal opozorilo

Izpeljanke

[uredi | uredi kodo]

Na podlagi specifikacije JSON ali iz nje je bilo zgrajenih več formatov serializacije. Primeri vključujejo:

Glej tudi

[uredi | uredi kodo]

Opombe

[uredi | uredi kodo]
  1. Angleška izgovorjava /ˈsən/ ali /ˈˌsɒn/.
  2. Crockford uporablja neozaimka pe/per (Crockford (2022)). V tem članku se za poenostavitev in razumevanje uporabljata oni/njih.

Sklici

[uredi | uredi kodo]
  1. 1 2 3 Crockford (2011).
  2. 1 2 3 »ISO/IEC 21778:2017 Information technology — The JSON data interchange syntax«, ISO (v angleščini), pridobljeno 24. junija 2025
  3. ECMA-404: The JSON Data Interchange Syntax (v angleščini) (2. izd.), Ecma International, december 2017, str. iii, opomba na dnu, arhivirano (PDF) iz spletišča dne 27. oktobra 2019, pridobljeno 29. aprila 2024{{citation}}: Vzdrževanje CS1: samodejni prevod datuma (povezava)
  4. 1 2 3 ECMA-404: The JSON Data Interchange Format (v angleščini) (1. izd.), Ecma International, Oktober 2013, arhivirano (PDF) iz spletišča dne 1. novembra 2013, pridobljeno 20. novembra 2023
  5. Sweigart (2015), str. 319.
  6. 1 2 3 Bray (2017a).
  7. Bray (2014).
  8. »Unofficial Java History«, Edu4Java (v angleščini), 26. maj 2014, arhivirano iz prvotnega spletišča dne 26. maja 2014, pridobljeno 30. avgusta 2019, Leta 1996 je Macromedia predstavila tehnologijo Flash, ki je nadomestila Java in ActiveX ter postala dejanski standard za animacijo na strani odjemalca.
  9. »JSON«, json.org (v angleščini)
  10. Yahoo!, Using JSON with Yahoo! Web services, arhivirano iz prvotnega spletišča dne 11. oktobra 2007, pridobljeno 3. julija 2009
  11. Crockford (2009).
  12. Edge (2016).
  13. Crockford (2016).
  14. 1 2 Holm (2011).
  15. 1 2 3 Subsume JSON: Proposal to make all JSON text valid ECMA-262 (v angleščini), Ecma TC39, 23. avgust 2019, pridobljeno 27. avgusta 2019
  16. 1 2 »Advance to Stage 4 - tc39/proposal-json-superset«, GitHub (v angleščini), 22. maj 2018
  17. »BigInt - MDN Web doc glossary«, Mozilla (v angleščini), pridobljeno 18. oktobra 2020
  18. ECMA-404, 2. izd., str. 3: »Skladnja JSON ne nalaga nobenih omejitev znakovnim nizom, ki se uporabljajo kot imena, ne zahteva, da so znakovni nizi imen enolični, in ne pripisuje nobenega pomena vrstnemu redu parov ime/vrednost.«
  19. 1 2 3 4 5 Crockford (2012).
  20. Andrysco; Jhala; Lerner (2016).
  21. »Trailing commas - JavaScript | MDN«, developer.mozilla.org (v ameriški angleščini), 12. september 2023, pridobljeno 16. decembra 2023
  22. JSON5 (v angleščini), json5, arhivirano iz prvotnega spletišča dne 29. novembra 2020, pridobljeno 16. decembra 2020
  23. ECMA-404, 2. izd., str. iii: »Skladnja JSON ni specifikacija popolne izmenjave podatkov. Smiselna izmenjava podatkov zahteva dogovor med proizvajalcem in potrošnikom o semantiki, ki je povezana z določeno uporabo skladnje JSON. Kar JSON ponuja, je skladenjski okvir, na katerega je mogoče takšno semantiko povezati.«
  24. »Media Types«, iana.org (v angleščini), pridobljeno 13. septembra 2015
  25. »Correct Content-Type Header for JSON«, ReqBin (v angleščini), 13. januar 2023, pridobljeno 23. marca 2024
  26. Bray (2017b).
  27. »JSON Schema and Hyper-Schema«, json-schema.org (v angleščini), pridobljeno 8. junija 2021
  28. »JSON Schema - Specification Links«, json-schema.org (v angleščini), pridobljeno 22. marca 2024
  29. »JSON Schema Implementations«, json-schema.org (v angleščini), arhivirano iz prvotnega spletišča dne 16. junija 2021, pridobljeno 8. junija 2021
  30. Zyp (2012).
  31. Crockford (2019).
  32. »JSONB data type«, www.cockroachlabs.com (v angleščini), pridobljeno 1. aprila 2025
  33. »The JSON data type«, dev.mysql.com (v angleščini), pridobljeno 1. aprila 2025
  34. ECMA-262: ECMAScript Language Specification (5. izd.), december 2009, arhivirano (PDF) iz spletišča dne 14. aprila 2011, pridobljeno 18. marca 2011{{citation}}: Vzdrževanje CS1: samodejni prevod datuma (povezava)
  35. »douglascrockford/JSON-js«, GitHub (v angleščini), 13. avgust 2019
  36. »Denial of Service and Unsafe Object Creation Vulnerability in JSON (CVE-2013-0269)«, ruby-lang.org (v angleščini), pridobljeno 5. januarja 2016
  37. »Microsoft .NET Framework JSON Content Processing Denial of Service Vulnerability«, tools.cisco.com (v angleščini), arhivirano iz prvotnega spletišča dne 6. novembra 2018, pridobljeno 5. januarja 2016
  38. JSON: The Fat-Free Alternative to XML (v angleščini), json.org, pridobljeno 14. marca 2011
  39. 1 2 Amazon Ion (v angleščini), Amazon, arhivirano iz spletišča dne 12. avgusta 2024, pridobljeno 26. avgusta 2024
  40. »The SQLite JSONB Format«, sqlite.org (v angleščini)
  41. Lee (2013).
  42. XML 1.1 Specification (v angleščini), World Wide Web Consortium, pridobljeno 26. avgusta 2019
  43. Saternos (2014), str. 45.
  44. Preston-Werner (2013).
  45. Preston-Werner; Gedam (2021).
  46. Edelman; Lowe; Oswalt (2018).
  47. 1 2 McCombs (2018).
  48. »HOCON (Human-Optimized Config Object Notation)«, GitHub (v angleščini), 28. januar 2019, pridobljeno 28. avgusta 2019, Primarni cilj je: ohraniti semantiko (drevesno strukturo; nabor tipov; kodiranje/ubežno kodiranje) iz JSON-a, vendar ga narediti bolj priročnega kot obliko konfiguracijske datoteke, ki jo lahko ureja človek.
  49. 1 2 »YAML Ain't Markup Language (YAML) Version 1.2«, yaml.org (v angleščini), pridobljeno 13. septembra 2015
  50. Dohm (2014).
  51. »Basic Customization«, Atom Flight Manual (v angleščini), GitHub, arhivirano iz spletišča dne 29. aprila 2024, pridobljeno 29. aprila 2024
  52. CSON (v angleščini), Bevry, 20. december 2023, arhivirano iz spletišča dne 23. aprila 2024, pridobljeno 29. aprila 2024 prek GitHub
  53. Seonghoon (2021).
  54. »config/HOCON.md at master · lightbend/config«, GitHub (v angleščini), pridobljeno 5. avgusta 2021
  55. »Config File - 2.5.x«, www.playframework.com (v angleščini), pridobljeno 5. avgusta 2021
  56. »Akka.NET HOCON Docs«, getakka.net (v angleščini)
  57. »Akka.NET Documentation«, getakka.net (v angleščini), pridobljeno 5. avgusta 2021
  58. »Managing HOCON configuration files with Puppet«, puppet.com (v angleščini), arhivirano iz prvotnega spletišča dne 11. februarja 2017, pridobljeno 4. marca 2023
  59. »StreamBase Documentation«, docs.streambase.com (v angleščini), pridobljeno 5. avgusta 2021
  60. »Configuration Guide«, docs.streambase.com (v angleščini), pridobljeno 5. avgusta 2021
  61. »StreamBase New and Noteworthy Archive«, docs.streambase.com (v angleščini), pridobljeno 5. avgusta 2021
  62. »Exabeam Advanced Analytics Release Notes«, docs.exabeam.com (v angleščini), arhivirano iz prvotnega spletišča dne 20. oktobra 2020, pridobljeno 4. marca 2023
  63. JITSI Project, »Config phase 1«, GitHub (v angleščini), pridobljeno 16. februarja 2021
  64. JITSI Project, »reference.conf«, GitHub (v angleščini), pridobljeno 16. februarja 2021
  65. »The JSON5 Data Interchange Format«, spec.json5.org (v angleščini), pridobljeno 25. junija 2022
  66. »JSON Functions And Operators«, sqlite.org (v angleščini), pridobljeno 25. junija 2023
  67. »JSON with Comments - JSON editing in Visual Studio Code«, Visual Studio Code (v angleščini), Microsoft, pridobljeno 29. aprila 2024
  68. Del Sole (2023), str. 46.
  69. Frisbie (2025).
  70. Butler; idr. (2016).
  71. »GeoJSON«, geojson.org (v angleščini), pridobljeno 7. avgusta 2022
  72. »JSON-LD 1.1«, World Wide Web Consortium (v angleščini), 16. julij 2020, pridobljeno 17. junija 2022
  73. »JSON-LD - JSON for Linking Data«, json-ld.org (v angleščini), pridobljeno 7. avgusta 2022
  74. »JSON-RPC«, jsonrpc.org (v angleščini), pridobljeno 17. junija 2022
  75. »JsonML (JSON Markup Language)«, JsonML.org (v angleščini), pridobljeno 17. junija 2022
  76. McKamey (2022).
  77. »FasterXML/smile-format-specification: New home for Smile format«, GitHub (v angleščini), pridobljeno 17. junija 2022
  78. Gupta (2019).
  79. »Universal Binary JSON Specification – The universally compatible format specification for Binary JSON«, ubjson.org (v angleščini), pridobljeno 17. junija 2022
  80. »UBJSON - JSON for Modern C++«, json.nlohmann.me (v angleščini), pridobljeno 7. avgusta 2022
  81. Feuling (2021), str. 129.
  82. Hegedus (2024), str. 194198.
  83. Liang; Davidson (2017).

Zunanje povezave

[uredi | uredi kodo]