JSON-tiedostojen avaaminen. JSON-perusteet

Json(JavaScript Object Notation) on kevyt dataesitysmuoto, joka perustuu JavaScript-syntaksin osajoukkoon, tarkemmin sanottuna kirjaimellisia taulukoita ja objekteja. JSON on vaihtoehto perinteisille muodoille (vain teksti tai XML), joita käytetään tiedonvaihdossa palvelimen ja asiakkaan välillä. Toisin kuin XML- ja XML-yhteensopivat kielet, jotka edellyttävät jäsentämistä, JSON-määritykset voidaan yksinkertaisesti sisällyttää JavaScriptiin. JSON-muotoa ehdotti ohjelmoija Douglas Crockford.

Ehkä tulen kaukaa, mutta ymmärtääksemme todella JSON:n, on ensin ymmärrettävä (muistattava) taulukoiden ja objektien syntaksi JavaScriptin kirjaimellisessa merkinnässä.

Taulukot literaaleina
JavaScriptin taulukko voidaan määrittää Array-konstruktorilla seuraavasti:

Muutt aData = uusi Array ("merkkijono", tosi, 43, nolla);

JavaScriptissä taulukot ovat kirjoittamattomia, joten ne voivat tallentaa erityyppisiä tietoja. Esimerkissä taulukko sisältää merkkijonon, loogisen arvon, luvun ja nolla-arvon.

Literaaliksi kuvattu taulukko voidaan määrittää hakasulkeilla, sisällä - taulukon elementtien arvot pilkuilla erotettuina. Tältä sama matriisi näyttäisi, mutta kirjaimellisesti:

Muutt aData = ["merkkijono", tosi, 43, nolla];

Taulukon yksittäisiä elementtejä voidaan osoittaa määrittämällä taulukon nimi ja elementin numero:

Alert (aData); hälytys (aData);

Objektit literaaleina
JavaScriptin objektit määritellään Object-konstruktorilla seuraavasti:

Var oAuto = uusi objekti (); oAuto.firm = "Audi"; oAuto.model = "A6"; oAuto.vuosi = 2008; oAuto.hinta = 78000;

Sama koodi, mutta kirjaimellisesti se näyttää tältä:

Var oAuto = ("firma": "Audi", "malli": "A6", "vuosi": 2008, "hinta": 78000);

Tämä koodi luo objektin, jolla on yritys-, malli-, vuosi- ja hinta-ominaisuudet, ja siihen pääsee seuraavasti:

Alert (oAuto.model); hälytys (oAuto.year);

mutta voit myös käyttää taulukoiden syntaksia viittaamalla objektin ominaisuuksiin tällä tavalla:

Alert (oAuto ["malli"]); hälytys (oAuto ["vuosi"]);

Kirjaimellisessa merkinnässä taulukoiden ja objektien kuvaukset voidaan upottaa toistensa sisään, jolloin syntyy taulukkoobjekti tai joukko esineitä... Tarkista tämä koodi:

Var aAuto = [("firma": "BMW", "malli": "X5", "vuosi": 2007, "hinta": 99000), ("firma": "Audi", "malli": "A6" , "vuosi": 2008, "hinta": 78000), ("firma": "Volkswagen", "malli": "Touareg 7L", "vuosi": 2006, "hinta": 45000)];

Olemme luoneet taulukon aAuto, joka sisältää kolme objektia. Yhdistämällä taulukoiden käyttösyntaksi objektien käyttösyntaksiin, yritetään saada toisen auton valmistusvuosi:

Alert (aAuto.year); // hanki 2008

Voit tehdä päinvastoin ja kuvata taulukoiden objektia:

Var oAuto = ("firma": ["BMW", "Audi", "Volkswagen"], "malli": ["X5", "A6", "Touareg 7L"], "vuosi" :, "hinta": );

tässä tapauksessa viitataan ensin objektiin ja sitten sen sisällä olevaan taulukkoon:

Alert (oAuto.year); // hanki 2008

Tässä on niin pitkä esipuhe, mutta nyt se on paljon selkeämpi sen kanssa. Json

Json- taulukoiden ja objektien yhdistelmä ja on tarkoitettu vain tietojen tallentamiseen. Näin ollen Json ei voi sisältää muuttujia eikä salli mitään toimintoja niille. Yritetään kirjoittaa edellinen esimerkki käyttämällä syntaksia Json:

("firma": ["BMW", "Audi", "Volkswagen"], "malli": ["X5", "A6", "Touareg 7L"], "vuosi" :, "hinta" :)

Huomautus että muuttujan nimi ja piste-pilkku puuttuvat. Tällaisen objektin siirto HTTP-protokollan avulla on erittäin nopeaa, koska se sisältää vähintään merkkejä. Vastaanotettuamme tällaiset tiedot asiakaspuolella ja kirjoittamalla ne johonkin muuttujaan (esim. sData), saamme tietojonon.
Huomautus: täsmälleen merkkijono, ei objekti tai objekti, jossa on sisäkkäisiä taulukoita. Muunna merkkijono objektiksi funktion avulla eval ().

Muutt oAuto = eval ("(" + sData + ")");

Tämä johtaa objektiin, jonka kuvailimme juuri edellä.

JSON XML:n kautta
Joten mikä on JSONin etu XML:ään verrattuna?

Tässä puhumme yksinomaan eduista ja haitoista vain Webissä tapahtuvan tiedonvaihdon järjestämisen kannalta.

Se, että XML osoittautuu erittäin tarpeettomaksi verrattuna JSONiin. Katsotaanpa tätä yksinkertaisella esimerkillä. Edustamme samoja tietoja XML-muodossa ja JSON-muodossa.

BMW X5 2007 99000 Audi A6 2008 78000 Volkswagen Touareg 7L 2006 45000

tältä se näyttää XML-muodossa ja alla - JSON-muodossa:

("yleinen": ("autot": [("firma": "BMW", "malli": "X5", "vuosi": 2007, "hinta": 99000), ("firma": "Audi", "malli": "A6", "vuosi": 2008, "hinta": 78000), ("firma": "Volkswagen", "malli": "Touareg 7L", "vuosi": 2006, "hinta": 45000 )]))

JSON-muotoa käytettäessä vahvistus on 42 tavua ja ilman välilyöntejä jopa 86 tavua. Ja jos muistamme myös, että JSON-muodossa olevat tiedot eivät vaadi ylimääräistä jäsentämistä asiakaspuolella, JSONin etu XML:ään nähden tietojen siirtämisessä palvelimelta asiakkaalle tulee ilmeiseksi ...

Muuttujat, taulukot ja objektit ovat tuttu ja kätevä tiedonesitysmuoto. Tieto on tapana kuvata selainkielellä JavaScript, mikä ei ole välttämätöntä palvelinkielessä PHP. JSON-muodon avulla voit yleistää ne yhdeksi kokonaisuudeksi eikä keskittyä ohjelmointikieleen. Tämä muuntaa tiedot pareiksi: "nimi = arvo". Arvo kussakin niistä voi olla myös kokoelma tällaisia ​​pareja.

On hyväksyttyä yhdistää JSON aaltosulkeisiin ja jälkimmäinen on melko perusteltua, koska JSON-muoto = Object Notation JavaScript. Paljon on muuttunut viimeisten erityisen dynaamisten vuosien aikana. Tiettyä tarkoitusta varten luotu toi usein odottamattomia tuloksia tai avasi uusia näköaloja.

Tiedonvaihto: selain - palvelin

AJAX-tekniikasta on tullut perinteinen, säännöllinen sivun päivitys kokonaan on lakannut olemasta suosittu. Vierailija avaa sivuston käynnistää sarjan osittaisia ​​tiedonvaihtoja, kun tietyt sivut vaihtuvat vain asiaankuuluvassa paikassa.

Uskotaan, että JSONin esiintyminen liittyy AJAX:n käyttöön, mutta itse asiassa assosiatiivisuus ja sen objektimerkintä (objektien kuvaamisen ja käytön syntaksin ominaisuudet) liittyvät paljon enemmän JSONiin kuin selaimen väliseen tiedonvaihtoon. ja palvelin.

Koska nykyaikaisten sivustojen sivujen sisällöstä on todella tullut "massiivinen" (volyymi), tiedonvaihdon muodon tehokkuus on tullut erityisen tärkeäksi. Tämä ei tarkoita, että JSONista olisi tullut uusi tietojen esitys, mutta tosiasia, että se on pitkään ollut osa JavaScript-syntaksia, on merkittävää.

Kyrillin käyttö muuttujien nimeämisessä on hyvin odottamaton ilmiö (hölynpölyä), mutta se toimii Chromen, Firefoxin ja jopa Internet Explorer 11:n uusimmissa versioissa.

Kyrillinen ja JSON

Ei tietenkään kannata käyttää tätä täysin odottamatonta ilmiötä, kun muistaa, kuinka helposti venäläisillä kirjaimilla kirjoitettujen muuttujien arvot muuttuvat krakozyabriksi: mitä voin sanoa nimistä, varsinkin ulkoisista.

On kyseenalaista, tukeeko kyrillisillä nimillä aloitetta selaimen ulkoinen ympäristö, jonka kanssa se on jatkuvasti tekemisissä. Mutta tämä tosiasia ansaitsee huomion siitä yksinkertaisesta syystä, että JSON-muoto on kyky kirjoittaa nimiä ja arvoja kehittäjän haluamalla tavalla. Tämä on olennaista, koska kussakin tehtävässä sen vaatima sovellusalueen kuvaus yksinkertaistaa huomattavasti virheenkorjausta ja vähentää virheiden määrää.

Ei ole väliä, millaiselle pohjalle syntaktinen innovaatio perustui - JSON, on tärkeää, että se antoi laillisen oikeuden ja todellisen mahdollisuuden laittaa vastaavuus: "mikä tahansa nimi = mikä tahansa arvo".

Meidän on kunnioitettava JavaScript-kieltä: syntaksin tarjoama ei sido kehittäjää eikä pakota häneltä mitään. Kehittäjä käyttää vapaasti kielen syntaksia tietomallin optimaaliseen muodostukseen ja algoritmia niiden käyttöön.

PHP ja JSON

Hyväksymällä tiedot JSON-muodossa palvelin (etenkin PHP:n kautta) tarjoaa mahdollisuuden käsitellä ne sellaisenaan ja palauttaa tuloksen takaisin selaimeen samanlaisessa muodossa. PHP alkuperäinen taulukko:

  • $ cJSON = array ("a" => "alfa", "b" => "beta", "g" => "gamma").

Muunna JSON-muotoon siirtämistä varten selaimeen:

  • $ cJS = json_encode ($ cJSON).

Tulos:

  • ("a": "alfa", "b": "beta", "g": "gamma").

Kuvassa näkyvä pesimä on sallittu.

Tässä luotu taulukko lisättiin uudella elementillä "itsestään" automaattisella indeksillä "0" ja sitten uudelleen määritetyllä indeksillä "z".

Json_decode () muuntaa JSON-merkkijonon PHP-taulukoksi. Samanlaisia ​​tuloksia voidaan saavuttaa manipuloimalla toimintoja ja räjähtää (). Joissakin tapauksissa tämä vaihtoehto on parempi.

Pesätaso

Elementit voidaan upottaa toisiinsa sekä selaimen että palvelimen puolella. Käytännössä JSON-muoto (kuten on kuvattu RFC 4627 -standardissa) tarjoaa huomattavasti enemmän kuin neljä sisäkkäistasoa, mutta tätä ominaisuutta ei pidä käyttää väärin.

On parasta olla koskaan ylittämättä kohtuullista riittävyyttä, sillä se tekee koodista luettavan, helpottaa muiden kehittäjien virheenkorjausta ja ymmärtämistä.

JSON:iin on tapana viitata tietorakenteisiin, jotka ovat yksinkertaisempia kuin XML ja ovat yhtä aikaa sekä ihmisten että tietokoneiden ymmärtämiä. Tämä pätee, kun tietomäärä on pieni ja kehittäjä on valinnut sisäkkäisen tason oikein. Kaikissa muissa tapauksissa hakasulkeiden lukumäärää on vaikea laskea ja ymmärtää sekä selain- että palvelinpuolella.

JSON-tiedostot

Käytännössä JSON ei useinkaan rajoitu havaittavaan lyhyeen merkkijonoon. Mikä tahansa datakonstruktio on aina pragmaattinen. Samalla JSON:ia voidaan käyttää tehokkaasti sekä tehtävän todellisissa tiedoissa (yrityksen henkilöstö) että tilapäisten tietojen toteuttamiseen (objektivälimuisti).

Yrityshenkilöstö ja JSON-muoto: esimerkki

Yleensä tietue yhdestä henkilöstä on sukunimi, nimi, sukunimi, syntymävuosi, erikoisala, koulutus, ... ja muutama yksinkertaisempi merkitys. Edes erityisen vaativissa yrityksissä yhden henkilön ennätys ei ylitä tusinaa tai kahta kenttää. Se on havaittavissa ja voidaan laittaa tietokantamerkkijonoon.

Jos yritys työllistää useita ihmisiä - tämä on yksi asia, mutta jos kymmeniä tuhansia - tämä on täysin erilainen. Voit jatkaa tietokannan käyttöä, mutta sen tallentaminen tiedostoksi näyttää käytännölliseltä ja helpommalta käyttää.

JSON on pelkkä tekstitiedosto. Tapaus henkilöstötaulukon kanssa, minne se menikin. Voit aina lukea sen. Avaa ja muokkaa on käytettävissä myös missä tahansa tekstieditorissa, jolla ei ole tapana lisätä palvelutietojaan tiedoston sisältöön. Yleensä * .json on puhdasta tekstiä sekä selaimessa että tiedoston sisällä - merkkijono.

Kuvassa näkyy kuvan muodostavan objektin välimuisti, esimerkki.

Tämä on esimerkki tiedoston sisällöstä, jonka on luonut sivusto, joka tarjoaa mukeille ja keramiikalle tilavuusväritulostuspalvelun. Luonnollisesti tällaisen JSON-muodon käyttäminen on todella ongelmallista kuin sen avaaminen. Tässä ja vastaavissa tapauksissa tiedoston lukemisessa ei kuitenkaan ole ongelmia: PHP lukee tiedoston, jäsentää sen ja siirtää sen selaimeen. Vierailijan muuttamat tiedot palautetaan palvelimelle ja kirjoitetaan takaisin.

Tässä käyttötapauksessa tiedosto toimii muuttujana, joka on tallennettu koodin ulkopuolelle. Tarvittaessa muuttuja saa arvon tiedostosta, ja jos vierailija muuttaa sitä sivuston tarjoamassa dialogissa, kaikki muutokset tallennetaan sellaisenaan. Tiedoston sisältöä ei tarvitse lukea ja tarkistaa.

JSON:ia käytetään usein palvelutietojen tallentamiseen ja käyttämiseen – tämä ei ole henkilöstötaulukko, eikä kehittäjän tai sivuston vierailijan tarvitse nähdä sitä.

XML ja JSON

"Kaikki ajoissa" on klassinen tieto, joka on otettu aksioomina jo ennen ohjelmoinnin tuloa. "Mikään ei näy noin vain" - tämä oli myös ennen kuin ihminen kirjoitti ensimmäisen ymmärrettävän ohjelman keinotekoisella kielellä.

Tietomuodot syntyvät todellisesta tarpeesta ja perustuvat saavutettuun tietoon. HTML:llä on oma polkunsa, XML:llä oma polkunsa ja JSON on JavaScript-objektilogiikka, joka on laajennettu muille kielille. Yhden asian vertaaminen toiseen ei ole paras tapa. Jokaiselle omansa.

XML selviää tehtävistään loistavasti, eikä se selvästikään aio jäädä historiaan. Ja JSON:ia käytettiin vuoteen 2006 asti, mutta kaikki kehittäjät eivät pitäneet velvollisuutenaan ilmoittaa tietyt vaihtoehdot tietojensa esittämiselle.

Käytännössä on ollut tapauksia, joissa BASICilla on kirjoitettu ohjelmia, jotka eivät käytä JSONia sellaisenaan, vaan tallentavat täydellisesti nimi = arvo -parit ja tuovat ne oikeiden algoritmien saataville oikeaan aikaan.

Erikoismerkit ("", "~", "|", ...) ja tietomuodot

Tapa työskennellä assosiatiivisten taulukoiden ja objektien kanssa JavaScriptissä tekee JSON:n käytöstä luonnollista ja kätevää. Se on todella hieno formaatti, mutta kyvyllä jakaa ja ketjuttaa merkkijonoja ja taulukoita käsittelemällä on paljon syvemmät juuret.

JavaScriptin join / split ja PHP:n implode / explode -toiminnot mahdollistavat kätevän ja tehokkaan XML-, JSON- ja omien tietomuotojen käytön. Jälkimmäinen on usein optimaalisempi, kun taas kaksi edellistä ovat ihanteellisia yleiseen käyttöön. Jos tietoja siirretään toiselle kehittäjälle, palvelimelle, tiedostolle tai tietokantaan, on parempi olla etsimättä XML:ää ja JSON:ia. Kaikki työskentelevät heidän kanssaan, koska tiedon lähetys/vastaanotto ei vaadi kommentteja.

JSONin käyttö Androidissa

Datan lukeminen ja kirjoittaminen JSON-muodossa Androidissa ei ole vain normi, vaan myös monet objektit, jotka keskittyvät työskentelemään juuri tällaisen tietomuodon kanssa.

Tässä tapauksessa käytetään JSON-muotoa. Ehkä näin on, mutta kysymys ei ole sosiaalisten verkostojen ilmiömäisyydestä, vaan siitä, että tiedon esittäminen muodossa "nimi = arvo" on todella kätevää sekä ohjelmointiin että käyttöön. Toisin kuin tiukka ja monimutkainen "XML", tämä on todella ihmisystävällinen muoto.

Assosiatiiviset taulukot

Näin kävi niin, että muuttujat piti kuvata (JavaScript) tai ainakin ilmoittaa alkuarvo (PHP). Molemmissa tapauksissa muuttuja voi muuttaa tyyppiään erittäin helposti. Kieli suorittaa tämän muunnoksen tarvittaessa automaattisesti.

Mutta miksi muuttuja ei saisi myös vaihtaa nimeään, ilmestyä algoritmin suorituksen aikana ja kadota, kun sitä ei enää tarvita? Assosiatiiviset taulukot ratkaisevat tämän ongelman, mutta silloin kun käytetään tällaisia ​​suhteellisen dynaamisia muuttujia, taulukon nimi ja sitä vastaava syntaksi seuraa niiden sovelluksen tilalle.

Tämä tilanne on erityisen selvä PHP:ssä, mutta voit sietää sen, kuten muuten "$"-symboli muuttujan nimessä ja yhdistelmä "$ this->" objektin sisällä. Ohjelmoimalla JavaScriptillä ja PHP:llä yhtä aikaa, aluksi todella ihmettelet kuinka erilaista kaikki on, mutta sitten kaikesta tulee niin tuttua ja luonnollista ...

Assosiatiivinen array -> JSON

Tässä esimerkissä * .docx -dokumentti luodaan PHPOffice / PHPWord -kirjastolla, ja aProperties-taulukko sisältää tämän asiakirjan ominaisuudet (tekijä, yritys, otsikko, luokka, luontipäivä...).

Toinen taulukko sisältää tiedot sivulle:

  • suunta (vaaka tai normaali);
  • pysty- ja vaakasuuntaiset mitat;
  • sisennykset (marginaalit vasemmalle, ylä-, ala-, oikealle);
  • ylä- ja alatunnisteet.

Asiakirjan muodostaminen suoritetaan palvelimella, johon PHPOffice / PHPWord-kirjasto on asennettu. Sivusto tarjoaa näiden taulukoiden arvojen hallinnan JavaScriptin avulla. JSON-muotoinen tulos palautetaan takaisin palvelimelle ja sitä käytetään PHP-algoritmeissa sen rakenteissa eli taulukoissa.

Dynaamiset muuttujat

JSON-muoto ratkaisee dynaamisten muuttujien ongelman. Täällä voit luoda, muokata ja poistaa muuttujia ilman tarpeetonta syntaktista sotkua. Se näyttää hyvältä ja sitä käytetään JavaScriptissä.

Tässä esimerkissä GetOjInfo () -funktio hakee arvon nimen ja arvon objektista. Aluksi ojInfo-muuttujalle määritetyssä JSON-merkkijono-objektissa on kolme elementtiä: Nimi, ikä ja työ. Muuttuja Status lisätään hieman myöhemmin.

Ensimmäisen delete-käskyn jälkeen ojInfo-merkkijono menettää age-elementin, toisen poiston jälkeen työelementin. Jos oletetaan, että tämä merkkijono on kokoelma muuttujia, joilla on tietty merkitys, niin JSONin avulla voit itse asiassa luoda, muuttaa ja poistaa mitä tahansa niiden joukkoja JavaScript-kielen kuvauksen ja käsittelyn toimintakentän (syntaksin) ulkopuolella. .

JSON-muotoa ei ole suunniteltu tätä vaihtoehtoa varten, mutta se on mahdollista, käytännöllistä ja kätevää.

JavaScriptin avulla voimme paitsi lisätä interaktiivisuutta verkkosivuille, myös mahdollistaa tehtävien suorittamisen, jotka ennen kuuluivat palvelimille. JSON tarjoaa helpon tavan luoda ja tallentaa strukturoitua dataa JavaScriptissä. JSON on erittäin suosittu ja loistava vaihtoehto XML:lle. JSON (JavaScript Object Notation), kuten nimestä voi päätellä, perustuu JavaScript-objektien luomiseen. JavaScript-objekteja voidaan helposti käsitellä, jäsentää käyttämällä samaa JavaScriptiä.

Toisin kuin XML, JSON-lauseet muodostavat helposti sekä ihmiset että tietokoneet. JSON-muodossa olevat tiedot voidaan määrittää esimerkiksi muuttujaan (näin luomme objektin); sitten nämä tiedot voidaan lukea juuri luodun objektin läpi.

Ensin luomme muuttujan tietojemme säilyttämiseksi, ja sitten käytämme JSON:ia objektin määrittämiseen. Tavoitteemme on melko yksinkertainen: etunimi-kenttä ja säteen arvo. JSON-merkkijonot on suljettava lainausmerkeissä. Jos käytät numeroita, lainausmerkit ovat valinnaisia.

Tämä esimerkki näyttää etunimi-ominaisuuden arvon selaimessa.

Luo paikkamerkkiobjekti

Luodaan realistisempi esimerkki: lisää JSON-tietomme DOM-objektiin.

var data = ("etunimi": "Ray"); document.getElementById ("paikkamerkki"). innerHTML = data.firstName;

Nyt varoituksen sijaan laitamme tiedot HTML-elementin sisään. JSON-tiedot voivat tietysti olla paljon monimutkaisempia. Yritetään lisätä joitakin kenttiä.

data = ("firstName": "Ray", "lastName": "Villalobos", "liittynyt": 2012); document.getElementById ("paikkamerkki"). innerHTML = data.etunimi + "" + data.sukunimi + "" + data.joined;

Huomaa, että JSON-tiedot on muotoiltu tietyllä tavalla ymmärtämisen helpottamiseksi. "Liitytty"-kenttä on 2012, joka ei vaadi lainausmerkkejä, koska se on numero. Katsotaanpa jotain hieman monimutkaisempaa.

Lisätään taulukoita

Entä jos haluamme esitellä ryhmän ihmisiä... meidän on käytettävä taulukoita. JSON-taulukoita voidaan luoda hakasulkeilla. Katsotaan kuinka tietomme näyttävät useilta käyttäjiltä.

Var data = ("käyttäjät": [("firstName": "Ray", "lastName": "Villalobos", "joined": 2012), ("firstName": "John", "lastName": "Jones", "liittynyt": 2010)]) document.getElementById ("paikkamerkki"). innerHTML = data.users.firstName + "" + data.users.lastName + "" + data.users.joined;

Se näyttää hieman monimutkaisemmalta, mutta todellisuudessa sitä ei ole vaikea ymmärtää. JSON-objekti luodaan aaltosulkeilla; taulukko luodaan hakasulkeilla. Tietojemme järjestämiseksi loimme käyttäjäobjektin, johon sijoitimme taulukon. Taulukko sisältää muita objekteja. Jokainen pari (nimi / arvo) on erotettu pilkulla.

Huomaa, kuinka nimen lisäämisen koodi on muuttunut. Yhdistimme uuden käyttäjäobjektin ja osoitimme sitten taulukon ensimmäistä elementtiä hakasulkeilla. Lisätään vielä yksi kerros tietorakenteeseen.

Var data = ("käyttäjät": [("firstName": "Ray", "lastName": "Villalobos", "joined": ("kuukausi": "tammikuu", "päivä": 12, "vuosi": 2012 )), ("firstName": "John", "lastName": "Jones", "joined": ("kuukausi": "huhtikuu", "päivä": 28, "vuosi": 2010))]) asiakirja. getElementById ("paikkamerkki"). innerHTML = data.users.firstName + "" + data.users.lastName + "-" + data.users.joined.month;

Yhdistetty ominaisuus sisältää nyt objektin, jossa on useita kenttiä; taulukkoa ei tarvitse käyttää, joten käytämme objektimerkintää. Nyt meillä on tietoja useista käyttäjistä, on aika käydä läpi jokainen käyttäjä ja näyttää ne luettelossa.

Käyttäjäluettelon toteuttaminen (JSON-objektin läpikulku)

Joten, käytetään javascriptiä ja luodaan käyttäjäluettelo.

Var data = ("käyttäjät": [("firstName": "Ray", "lastName": "Villalobos", "joined": ("kuukausi": "tammikuu", "päivä": 12, "vuosi": 2012 )), ("firstName": "John", "lastName": "Jones", "joined": ("kuukausi": "huhtikuu", "päivä": 28, "vuosi": 2010))]) var output = "

    ";) lähtö + ="
"; document.getElementById (" paikkamerkki "). innerHTML = tulos;

Objektin kaikkien ominaisuuksien toistamiseksi on olemassa rakenne for...in:

For (var key in object) (// avain - ominaisuuden nimi // objekti - ominaisuuden arvo...)

Tässä käydään läpi kaikki taulukon elementit; tallennamme tiedot tulosmuuttujaan ja laitamme tiedot elementtiin, jonka id on yhtä suuri kuin paikkamerkki. voit huomata, että tietomme kehittyvät hieman hitaasti.

Luetaan JSON-tiedostoa ulkoisesta tiedostosta

Olisi kiva tallentaa tiedot ulkoiseen tiedostoon ja lukea ne tarvittaessa. Aion käyttää jQuery-kirjastoa, joten meidän on ensin sisällytettävä jQuery-kirjasto; sitten kutsumme getJSON-funktiota. Koodimme näyttää tältä:

JSON-näyte

Tämä on pitkälti sama koodi, mutta tiedot tulostetaan ulos. Päätämme kaiken vain getJSON-toiminnolla, joka tekee kaiken tiedoston lukemisen kovan työn. Oletetaan, että datatiedosto data.json on samassa hakemistossa ja näyttää tältä:

("käyttäjät": [("firstName": "Ray", "lastName": "Villalobos", "joined": ("kuukausi": "tammikuu", "päivä": 12, "vuosi": 2012)), ("firstName": "John", "lastName": "Jones", "joined": ("kuukausi": "huhtikuu", "päivä": 28, "vuosi": 2010))])

Kuten näet, JSON on todella helppolukuinen, ja kun olet tottunut suluihin, se on helppo koodata.

JSON (JavaScript Object Notation) on muoto tietojen vaihtamiseen tekstimuodossa. Mahdollistaa monimutkaisten tietorakenteiden siirtämisen sarjoitetussa muodossa. Tästä tiedonsiirtomuodosta on tullut niin suosittu, että PHP-ytimeen on lisätty toimintoja tässä muodossa olevien tietojen käsittelemiseksi versiosta 5.2.0 lähtien. Tämä tarkoittaa, että lisälaajennuksia ei tarvitse liittää. Ihmiset ymmärtävät hyvin JSON-tietomuodon. Lisäksi tämän tyyppistä tiedonvaihtoa käytetään laajasti eri API-palvelujen välillä. Ja tiedonvaihdon algoritmien oikealla kehittämisellä voit saada erittäin suuren nopeuden vahvistuksen kuin esimerkiksi työskennellessäsi XML-muodossa olevien tietojen kanssa.

Lähetetään tietoja

Voit lähettää dataa JSON-muodossa kahdella tavalla: muodostaa GET- tai POST-pyynnön koodatuilla tiedoilla, jotka sijaitsevat GET- tai POST-muuttujassa, tai laittaa tiedot dokumentin runkoon. Käytännössä käytetään yleensä toista vaihtoehtoa.

Tietojen lähettämiseen tarvitaan seuraavat toiminnot:

  • merkkijono json_encode(sekaarvo [, int option = 0])

    Arvoparametri on data, joka on koodattava. Mitä tahansa tyyppiä tuetaan paitsi tyyppiä resurssi... Asetukset-parametri sisältää bittimaskin mahdollisista syötetyistä arvoista (katso toimitetut JSON-vakiot taulukosta).

  • resurssi stream_context_create (])

    Tämä toiminto on tarkoitettu luomaan ja palauttamaan virtakonteksti optionparametrissa määritetyillä vaihtoehdoilla. Valinnaisen valinnaisen parametrin on oltava assosiatiivista taulukkotyyppiä. Aluksi se on tyhjä. Toisen valinnaisen parametriparametrin on myös oltava assosiatiivinen taulukko muodossa $ data ['nimi'] = arvo.

  • merkkijono file_get_contents(merkkijono tiedostonimi [, bool use_include_path [, resurssikonteksti [, int offset [, int maxlen]]]])

    Tämän toiminnon avulla voit saada tiedoston sisällön merkkijonona. Tiedostonimi-parametri on luettavan tiedoston nimi. Voit käyttää vakiota parametrissa use_include_path PHP 5:stä lähtien FILE_USE_INCLUDE_PATH löytääksesi tiedoston sisällytyspolusta. Kontekstiparametri edustaa kontekstiresurssia, joka on luotu komennolla stream_context_create (). Jos tiedoston avaamisyritys epäonnistuu, arvo palautetaan väärä... Offset-parametri sisältää siirtymän, josta tietojen lukeminen aloitetaan. Maxlen-parametri määrittää vastaanotetun tiedon koon.

    Huomautus: Poikkeamaa ei ole määritetty käytettäessä etävirtoja.

Alla on esimerkki tietojen lähettämisestä JSON-muodossa:

// Lähetettävät tiedot $ request = array ("StartDate" => "2013-10-10", "EndDate" => "2013-10-10", "IDS" => array (1,2,3,4 , 5,6,7)); // Määritä virran kontekstin asetukset $ options = array ("http" => array ("method" => "POST", "header" => "Content-Type: application / json; charset = utf-8 \ r \ n "," content "> json_encode ($-pyyntö))); // Luo virran konteksti $ konteksti = stream_context_create ($ option); // Tietojen lähettäminen ja tuloksen vastaanottaminen echo file_get_contents ("http://test.ru/json.php", 0, $ konteksti);

Se käyttää improvisoitua tietorakennetta, joka koostuu aloitus- ja lopetuspäivistä sekä numerojoukosta joillekin ehdollisille tietueille. Huomaa, että pyynnön otsikossa Sisältötyyppi tyyppi on "sovellus / json".

Haetaan tietoja

Lähetetyn tiedon vastaanottamiseksi yllä kuvatulla tavalla on luettava data syöttövirrasta " php: // syöttö”.

Tietojen hyväksymiseen käytetyt toiminnot:

  • sekoitettu json_decode(merkkijono json [, bool assoc = false [, int syvyys = 512 [, int option = 0]]])

    Tämä toiminto purkaa JSON-merkkijonon. json-parametri määrittää purettavan merkkijonon. Assoc-parametri ohjaa, muunnetaanko palautetut tiedot assosiatiiviseksi taulukoksi. Jos tällainen tarve on, sinun on määritettävä tämän parametrin arvo totta... Syvyysparametri ilmaisee rekursion syvyyden. Ja viimeinen neljäs parametri, option, sisältää asetukset bitmask dekoodausta varten. Tällä hetkellä vain tuettu JSON_BIGINT_AS_STRING(isot kokonaisluvut muunnetaan kelluviksi oletuksena)

  • resurssi fopen(merkkijonotiedoston nimi, merkkijonotila [, bool use_include_path [, resurssikonteksti]])

    Avaa tiedoston ja palauttaa tiedostokuvaajan. Tiedostonimi-parametri on nimetty resurssi, joka osoittaa tiedostoon. Mode-parametri määrittää tiedoston pääsyn tyypin (katso taulukko, jossa on luettelo mahdollisista fopen-tiloista ()). Sitten on kaksi valinnaista parametria: use_include_path ja konteksti. Kun asetat parametrin use_include_path arvoksi totta tai 1 ja jos nimetyksi resurssiksi on määritetty suhteellinen polku, avattava tiedosto etsitään funktioiden käyttämien hakemistojen luettelosta sisältää ja vaatia... Käytännössä tätä parametria ei käytännössä käytetä. Kontekstiparametria käytetään määrittämään resurssin konteksti.

  • merkkijono stream_get_contents(resurssikahva [, int maxlen = -1 [, int offset = -1]])

    Tämän toiminnon avulla voit saada streamin sisällön merkkijonona. Käsittelijäparametri on säikeen resurssi. Maxlen-parametri sisältää luettavien tavujen enimmäismäärän. Oletuksena se on -1, mikä osoittaa, että kaikki tiedot on vastaanotettu. Offset-parametri sisältää siirtymän, josta tietojen lukeminen aloitetaan. Oletuksena se on myös -1, mikä tarkoittaa, että luku suoritetaan aloitusasennosta.

Alla on esimerkki tietojen hankkimisesta JSON-muodossa palvelinpuolella:

// Avaa syötevirta lukemista varten $ f = fopen ("php: // input", "r"); // Hae virran sisältö $ data = stream_get_contents ($ f); if ($ data) (// Käsitellään koodia print_r (json_decode ($ data));)

Tuloksena oleva tietorakenne:

StdClass Object (=> 10.10.2013 => 10.10.2013 => Array (=> 1 => 2 => 3 => 4 => 5 => 6 => 7))

Huomautus: On tarpeen ottaa huomioon se tosiasia, että JSON-muodon kanssa työskentelyyn tietojen on oltava utf-8-koodauksessa.

JSON toimitti vakiot json_encode () -funktiolle

JSON_HEX_TAG (kokonaisluku) Kaikki on koodattu \ u003C ja \ u003E. Saatavilla PHP 5.3.0:sta lähtien.
JSON_HEX_AMP (kokonaisluku) Kaikki & on koodattu \ u0026:een. Saatavilla PHP 5.3.0:sta lähtien.
JSON_HEX_APOS (kokonaisluku) Kaikki merkit on koodattu koodilla \ u0027. Saatavilla PHP 5.3.0:sta lähtien.
JSON_HEX_QUOT (kokonaisluku) Kaikki merkit on "koodattu muodossa \ u0022. Saatavilla PHP 5.3.0:sta lähtien.
JSON_FORCE_OBJECT (kokonaisluku) Lähettää objekti taulukon sijaan, kun käytät ei-assosiatiivista taulukkoa. Tästä on hyötyä, kun vastaanottava ohjelma tai koodi odottaa objektia tai matriisi on tyhjä. Saatavilla PHP 5.3.0:sta lähtien.
JSON_NUMERIC_CHECK (kokonaisluku) Koodaa numeroita sisältävät merkkijonot numeroiksi. Saatavilla PHP 5.3.3:sta lähtien.
JSON_BIGINT_AS_STRING (kokonaisluku) Koodaa suuret kokonaisluvut niiden merkkijonovastineiksi. Saatavilla PHP 5.4.0:sta lähtien.
JSON_PRETTY_PRINT (kokonaisluku) Käytä palautetuissa tiedoissa välilyöntejä sen muotoiluun. Saatavilla PHP 5.4.0:sta lähtien.
JSON_UNESCAPED_SLASHES (kokonaisluku) Älä pakene /. Saatavilla PHP 5.4.0:sta lähtien.
JSON_UNESCAPED_UNICODE (kokonaisluku) Älä koodaa monitavuisia Unicode-merkkejä (oletusarvoisesti ne on koodattu muodossa \uXXXX). Saatavilla PHP 5.4.0:sta lähtien.

Luettelo mahdollisista tiloista fopen () -tilalle

"R" Avaa tiedoston vain luku -tilassa; asettaa osoittimen tiedoston alkuun.
'R +' Avaa tiedoston lukemista ja kirjoittamista varten; asettaa osoittimen tiedoston alkuun.
"W" Avaa tiedoston vain kirjoittamista varten; asettaa osoittimen tiedoston alkuun ja lyhentää tiedoston pituuteen. Jos tiedostoa ei ole olemassa, se yrittää luoda sen.
"W +" Avaa tiedoston lukemista ja kirjoittamista varten; asettaa osoittimen tiedoston alkuun ja lyhentää tiedoston pituuteen. Jos tiedostoa ei ole olemassa, se yrittää luoda sen.
"A" Avaa tiedoston vain kirjoittamista varten; asettaa osoittimen tiedoston loppuun. Jos tiedostoa ei ole olemassa, se yrittää luoda sen.
‘A +’ Avaa tiedoston lukemista ja kirjoittamista varten; asettaa osoittimen tiedoston loppuun. Jos tiedostoa ei ole olemassa, se yrittää luoda sen.
'X' Luo ja avaa vain kirjoittamista varten; asettaa osoittimen tiedoston alkuun. Jos tiedosto on jo olemassa, fopen () epäonnistuu, palauttaa arvon FALSE ja antaa E_WARNING-tason virheen. Jos tiedostoa ei ole olemassa, se yrittää luoda sen. Tämä vastaa O_EXCL | O_CREAT -lippujen määrittämistä sisäiselle avoimelle (2) järjestelmäkutsulle.
"X +" Luo ja avaa lukemista ja kirjoittamista varten; muuten käyttäytyy samalla tavalla kuin 'x'.
'C' Avaa tiedoston vain kirjoittamista varten. Jos tiedostoa ei ole olemassa, se luodaan. Jos tiedosto on olemassa, sitä ei katkaista (toisin kuin 'w'), eikä tämän funktion kutsu aiheuta virhettä (kuten 'x'). Tiedostoosoitin asetetaan tiedoston alkuun. Tästä voi olla hyötyä, jos haluat lukita tiedoston (katso parvi ()) ennen muutosta, koska 'w':n käyttö voi katkaista tiedoston ennen lukon hankkimista (jos haluat katkaista tiedoston, voit käyttää ftruncate () -komentoa lukituspyyntö).
"C +" Avaa tiedoston lukemista ja kirjoittamista varten; muuten käyttäytyy samalla tavalla kuin c:llä.

Attribuutti-arvo -parit. Se on yleisin tietomuoto, jota käytetään asynkroniseen tiedonsiirtoon selaimen ja palvelimen välillä, ja se korvaa suurelta osin XML:n (AJAX:n käyttämä).

JSON on kielestä riippumaton tietomuoto, joka on johdettu JavaScriptistä. Vuodesta 2017 lähtien monet ohjelmointikielet ovat käyttäneet koodia tietojen luomiseen ja analysoimiseen vain siinä. JSON-tiedostojen nimet käyttävät .json-tunnistetta.

Luomisen historia

JSON-muodon kehitti alun perin Douglas Crockford 2000-luvun alussa, ja myöhemmin kaksi kilpailevaa standardia (RFC 7159 ja ECMA-404) määritteli sen vuonna 2013. ECMA-standardi kuvaa vain kelvollista syntaksia, kun taas RFC kattaa joitain turvallisuuden ja yhteentoimivuuden perusteita.

Lisäksi on olemassa RFC 7493, joka määrittelee rajoitetun profiilin, joka tunnetaan nimellä I-JSON (lyhenne sanoista Internet JSON). Hän yrittää ratkaista joitakin kommunikaatioongelmia. Jokainen tällainen asiakirja on kelvollinen JSON-dokumentti.

Tarve luoda tämä muoto syntyi tarpeesta todelliseen viestintäprotokollaan palvelimen ja selaimen välillä, joka toteutetaan reaaliajassa ilman lisäosien (kuten Flash- tai Java-sovelmien) käyttöä.

Kehitys ja soveltaminen

Kuten todettiin, Douglas Crockford, StateSoftwaren luoja, oli edelläkävijä ja popularisoi JSON-muotoa. Myöhemmin perustajat sopivat rakentavansa järjestelmän käyttämällä tavallisia selainominaisuuksia ja tarjosivat kehittäjille abstraktiokerroksen luodakseen sovelluksia jatkuvalla duplex-yhteydellä verkkopalvelimeen. Samalla tuli mahdolliseksi pitää kaksi HTTP-yhteyttä auki ja käsitellä niitä selaimen normaaliin käyttöaikaan asti, jos tiedonvaihtoa ei suoritettu. Perustajat kävivät pyöreän pöydän keskustelun ja äänestivät datamuodon nimeämisestä JSML tai JSON ja määrittelivät lisenssityypin, jolla uusi kehitys on saatavilla. Formaatti on tällä hetkellä avoimen lähdekoodin.

Käytännöllinen käyttö

JSON.org-verkkosivusto avattiin vuonna 2002. Joulukuussa 2005 Yahoo! alkoi tarjota joitakin verkkopalveluitaan tässä muodossa. Google aloitti JSON-syötteiden käytön GData-verkkoprotokollassaan vasta joulukuussa 2006.

JSON-tiedostomuoto oli alun perin tarkoitettu JavaScript-komentosarjakielen osajoukolle (erityisesti Standard ECMA-262, 3rd Edition-December) ja sitä käytettiin yleisesti sen kanssa. Tämä on kuitenkin tietokielestä riippumaton muoto. Koodi JSON-tietojen jäsentämiseen ja luomiseen on saatavilla useilla ohjelmointikielillä. JSON-verkkosivustolla on luettelo kaikista kirjastoista.

Vaikka online-JSON-muotoa mainostettiin alun perin ja sitä pidettiin JavaScriptin ja ECMAScriptin tiukana osajoukkona, se sallii toisinaan joitain ei-escape-merkkejä merkkijonoissa, jotka ovat virheellisiä JavaScript- ja ECMAScript-merkkijonoissa.

JSONista tuli kansainvälinen ECMA-standardi vuonna 2013 nimellä ECMA-404, jota käytettiin viitteenä RFC 7158:ssa samana vuonna. Vuonna 2014 RFC 7159:stä tuli ensisijainen viite JSONin käyttöön verkossa (esim. MIME-sovellus / json).

Tietotyypit, syntaksi ja esimerkki

Tärkeimmät JSON-tietotyypit ovat:

  • Numero: Etumerkillinen desimaaliluku, joka voi sisältää murto-osan ja voi käyttää eksponentiaalista merkintää E, mutta ei voi sisältää ei-lukuja (kuten NaN). Muoto ei tee eroa kokonaislukujen ja liukulukujen välillä. JavaScript käyttää kaksinkertaista tarkkuutta liukulukumuotoa kaikille numeerisille arvoilleen, mutta muut JSON:ia käyttävät kielet voivat koodata ne eri tavalla.

  • Merkkijono: Nollan tai suurten Unicode-merkkien sarja. Merkkijonot on rajattu lainausmerkeillä ja ne tukevat kenoviiva-syntaksia.
  • Literaalit: Mikä tahansa totta tai epätosi.
  • Taulukko: Järjestetty luettelo nollasta tai useammasta arvosta, joista jokainen voi olla mitä tahansa tyyppiä. Taulukot käyttävät hakasulkeita pilkuilla.
  • Objekti: Järjestämätön nimi/arvo-parien kokoelma, jossa nimet (kutsutaan myös avaimiin) ovat merkkijonoja. Koska objektit on suunniteltu edustamaan assosiatiivisia taulukoita, on suositeltavaa (vaikkakaan ei pakollista), että jokainen avain on yksilöllinen siinä. Objektit erotetaan aaltosulkeilla ja erotetaan toisistaan ​​pilkuilla, kun taas jokaisen sisällä kaksoispiste erottaa avaimen tai nimen sen arvosta.
  • Null: tyhjä arvo, joka käyttää sanaa null.

Rajoitetut välilyönnit ovat sallittuja, ja ne voidaan sijoittaa syntaktisten elementtien ympärille tai väliin (merkitys ja välimerkit, mutta ei merkkijonoarvon sisällä). Tässä tarkoituksessa vain neljä erikoismerkkiä lasketaan välilyönneiksi: välilyönti, vaakasuora sarkain, rivinvaihto ja vinoviiva. Erityisesti tavujärjestysmerkkiä ei tarvitse generoida vastaavalla toteutuksella (vaikka se voidaan hyväksyä JSON-jäsentämisen yhteydessä). JSON-pyyntö ei anna syntaksia kommenteille.

Aiemmat versiot (kuten RFC 4627:ssä määritellyt) vaativat, että kelvollinen asiakirja koostui vain objekti- tai taulukkotyypistä, joka saattoi sisältää muita tyyppejä. Tätä JSON-muotoa, jonka esimerkki löytyy vanhoilta verkkosivuilta, ei tällä hetkellä käytetä.

Tietojen siirrettävyysongelmat

Vaikka Douglas Crockford väitti alun perin, että JSON on JavaScriptin tiukka osajoukko, sen spesifikaatioiden avulla voidaan luoda asiakirjoja, joita ei voi lukea JavaScriptillä. Erityisesti JSON sallii Unicode-merkkijonoarvojen U + 2028 LINE SEPARATOR ja U + 2029 PARAGRAPH SEPARATOR näkyvän ilman koodinvaihtomerkkiä lainausmerkkijonoissa, mutta JavaScript ei salli sitä. Tämä johtuu siitä, että JSON kieltää vain "ohjausmerkit". Parhaan yhteensopivuuden takaamiseksi nämä merkit tulee merkitä kenoviivalla. Tämä hienovaraisuus on tärkeä JSONP:tä luotaessa.

JSON-muoto: kuinka se avataan?

JSON-asiakirjat voidaan koodata UTF-8-, UTF-16- tai UTF-32-koodauksella, oletuskoodaus on UTF-8. Nämä standardit tukevat kaikkia "Unicode"-merkkejä, mukaan lukien monikielisen päätason ulkopuolella olevat merkit (U + 10000 - U + 10FFFF). Jos nämä merkit on pakotettu, ne on kuitenkin kirjoitettava käyttämällä UTF-16-korvauspareja. Tämä on yksityiskohta, jonka jotkin JSON-jäsentijät huomaavat. Kuinka avata ja miten tällainen tiedosto luetaan?

Tämän muodon numerot ovat agnostisia niiden esityksen suhteen ohjelmointikielissä. Kokonaisluvun ja liukulukuarvon välillä ei ole eroa: jotkut toteutukset voivat käsitellä lukuja 42, 42.0 ja 4.2E + 1 samana numerona, kun taas toiset eivät. Lisäksi ei vaadita sellaisia ​​ongelmia kuin ylivuoto, alivuoto, tarkkuuden menetys tai pyöristys. Myöskään JSON-muoto ei kerro mitään etumerkittyjen nollien käsittelystä riippumatta siitä, onko 0.0 muu kuin -0.0. Useimmat IEEE 754 liukulukustandardia käyttävät toteutukset, mukaan lukien JavaScript, tallentavat allekirjoitettuja nollia, mutta kaikki JSON-toteutukset eivät sitä pysty.

Käyttö JavaScriptissä

Koska JSON-muoto on johdettu JavaScriptistä ja sen syntaksi on (enimmäkseen) kielen osajoukko, voit käyttää JavaScripteval-funktiota JSON-tietojen jäsentämiseen. Edellisessä osiossa käsitellyn Unicode-merkkijonopäätteiden jäsennysongelman vuoksi eval-funktion on korvattava ne.

Ei ole turvallista, jos merkkijonoa ei ole vahvistettu oikein. Sen sijaan sinun tulee käyttää JSON-jäsennyskirjastoa tai JavaScript-tukea JSON-tiedoston lukemiseen ja kirjoittamiseen.

Oikein toteutettu jäsentäjä hyväksyy vain kelvollisen JSON-muodon, kuten järjestelmässä on kuvattu, mikä estää mahdollisesti haitallisen koodin tahattoman suorittamisen.

Vuodesta 2010 lähtien selaimet, kuten Firefox ja Internet Explorer, ovat voineet jäsentää ja viedä JSON-muotoon.

Natiivitietotyyppejä ei tueta

JavaScript-syntaksi määrittää useita alkuperäisiä tietotyyppejä, jotka eivät sisälly JSON-standardiin: Map, Set, Date, Error, Regular Expression, Function ja muutama muu. Nämä JavaScript-tietotyypit on esitettävä jossain muussa muodossa, ja molemmat ohjelmat sopivat muuntamisesta tyyppien välillä. Nykyään on olemassa joitakin defacto-standardeja, kuten päivämäärän muuntaminen merkkijonoksi, mutta mikään niistä ei ole yleisesti hyväksytty. Muilla kielillä voi olla erilaisia ​​natiivityyppejä, jotka on sarjoitettava huolellisesti tämäntyyppisten muunnosten käsittelemiseksi.

JSON-skeema

Kaavaa käytetään määrittämään JSON-tietorakenne validointia, dokumentointia ja vuorovaikutuksen hallintaa varten. Se tarjoaa eräänlaisen sopimuksen sovelluksen vaatimista tiedoista ja tavan muokata niitä.

Kaava perustuu XML Schema (XSD) -konsepteihin, mutta on patentoitu. Kuten XSD:ssä, sekä skeemalle että datalle käytetään samoja serialisointi-/deserialisointitoimintoja.

Schema on Internet-projekti, jonka versio on tällä hetkellä 5 (julkaistu 13. lokakuuta 2016). Eri ohjelmointikielille on saatavana useita validaattoreita, joista jokaisella on erilainen yhteensopivuustaso. Standardia tiedostotunnistetta ei ole, mutta jotkut asiantuntijat ehdottavat .schema.jsonin hyväksymistä.

MIME-tyyppi

JSON-tekstin virallinen MIME-tyyppi on "application / json". Vaikka useimmat nykyaikaiset toteutukset ovat omaksuneet virallisen MIME-tyypin, monet sovellukset tarjoavat edelleen vanhaa tukea muille MIME-tyypeille. Monet palveluntarjoajat, selaimet, palvelimet, verkkosovellukset, kirjastot, viitekehykset ja API:t käyttävät, odottavat tai tunnistavat MIME-tyyppiä, jonka sisältö näyttää "text / json" tai "text / javascript". Merkittäviä esimerkkejä ovat Google Search API, Yahoo !, Flickr, Facebook API, DojoToolkit 0.4 ja niin edelleen.

JSON-RPC

JSON-RPC on JSON-pohjainen RPC-protokolla, joka on luotu korvaamaan XML-RPC tai SOAP. Se on yksinkertainen protokolla, joka määrittelee vain muutaman tyyppisiä tietoja ja komentoja. Sen avulla järjestelmä voi lähettää ilmoituksia (palvelimelle tietoja, jotka eivät vaadi vastausta) ja useita puheluita palvelimelle, joihin voidaan vastata epäkunnossa.

AJAJ

Asynkroninen JavaScript ja JSON (tai AJAJ) viittaavat samaan dynaamiseen verkkosivun metodologiaan kuin Ajax, mutta XML:n sijaan JSON-tietomuoto hallitsee. AJAJ on verkkokehitystekniikka, jonka avulla verkkosivu voi pyytää uutta tietoa sen jälkeen, kun se on ladattu selaimeen. Se yleensä näyttää ne palvelimelta vastauksena käyttäjän toimiin tällä sivulla. Esimerkiksi sen, mitä käyttäjä kirjoittaa hakukenttään, asiakaskoodi lähettää sitten palvelimelle, joka vastaa välittömästi pudotusluettelolla vastaavista tietokantakohteista.

Turvallisuusnäkökohdat

JSON-teksti on määritelty tietojen serialisointiobjektiksi. Kuitenkin sen suunnittelu, JavaScript-komentosarjakielen löysä osajoukko, aiheuttaa useita turvallisuusongelmia. He keskittyvät Javascript-tulkin käyttöön JSON-tekstin dynaamiseen suorittamiseen, kuten inline JavaScript. Tämä altistaa ohjelman virheellisille tai haitallisille komentosarjoille. Tämä on vakava ongelma, kun käsitellään Internetistä haettua tietoa.

Tämä yksinkertainen ja suosittu mutta riskialtis menetelmä hyödyntää JavaScripteval-yhteensopivuutta.

Jotkut kehittäjät uskovat virheellisesti, että JSON-teksti on myös syntaktisesti samanlainen kuin JavaScript, vaikka tämä on vain osittain totta. Siksi uskotaan, että JavaScript-ohjelman helppo tapa jäsentää tietoja tässä muodossa on käyttää sisäänrakennettua JavaScripteval-funktiota, joka on suunniteltu arvioimaan Javascript-lausekkeita. Tietyn jäsentimen sijaan tulkkia itseään käytetään JSON-tietojen suorittamiseen luoden luonnollisia JavaScript-objekteja. Tämä menetelmä on kuitenkin riskialtis, jos on mahdollista, että JSON-tiedot voivat sisältää mielivaltaisen Javascriptin, joka sitten suoritetaan samalla tavalla. Jos tietoja ei ensin validoida, eval-menetelmä on alttiina tietoturva-aukoille, joissa tiedot ja koko JavaScript-ympäristö eivät ole yhden luotettavan lähteen hallinnassa.

Esimerkiksi, jos tietoja ei ole vahvistettu, haitallinen JavaScript hyökkää niihin. Tällaiset rikkomukset voivat myös aiheuttaa tietovarkauksien, todennusväärennösten ja muun mahdollisen tietojen ja resurssien väärinkäytön riskin.

Näin ollen uusi JSON.parse-toiminto on suunniteltu turvallisemmaksi vaihtoehdoksi evalille. Se on erityisesti suunniteltu käsittelemään JSON-tietoja, ei JavaScriptiä. Se oli alun perin suunniteltu sisällytettäväksi ECMAScript-standardin neljänteen painokseen, mutta niin ei tapahtunut. Se lisättiin ensimmäisen kerran versiossa 5, ja nyt suurimmat selaimet tukevat sitä.