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

On tapana yhdistää JSON kiharaisiin aaltosulkeisiin, ja jälkimmäinen on melko perusteltua, koska JSON-muoto = JavaScript Object Notation. 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 täysin on lakannut olemasta suosittu. Vierailija avaa sivuston käynnistää sarjan osittaisia ​​tiedonvaihtoja, kun tietyt sivut vaihtuvat vain asiaankuuluvassa paikassa.

Uskotaan, että JSONin syntyminen liittyy AJAX:n käyttöön, mutta itse asiassa assosiatiivisella ja sen objektimerkinnällä (objektien kuvaamiseen ja käyttämiseen tarkoitetun syntaksin ominaisuudet) liittyy paljon enemmän JSON:iin kuin tietojen vaihdolla niiden välillä. selain ja palvelin.

Koska nykyaikaisten sivustojen sivujen sisällöstä on todella tullut "massiivinen" (volyymi), tiedonvaihdon muodon tehokkuus on noussut erityisen tärkeäksi. Tämä ei tarkoita, että JSONista olisi tullut uusi dataesitys, mutta tosiasia, että se on pitkään ollut JavaScript-syntaksin osa, 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

Tietenkään ei ole mitään järkeä käyttää tätä täysin odottamatonta ilmiötä, kun muistaa, kuinka helposti venäläisillä kirjaimilla kirjoitettujen muuttujien arvot muuttuvat hölynpölyksi: mitä voimme sanoa nimistä, etenkin 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 toiveiden mukaan. Tämä on tärkeää, koska jokaisessa tehtävässä sen vaatima sovellusalueen kuvaus yksinkertaistaa huomattavasti virheenkorjausta ja vähentää virheiden määrää.

Sillä ei ole väliä, mikä syntaktisen innovaation - JSON - perusta tarkalleen oli, on tärkeää, että se antoi laillisen oikeuden ja todellisen mahdollisuuden asettaa 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 muodostaakseen optimaalisesti tietomallin ja algoritmin niiden käyttöä varten.

PHP ja JSON

Hyväksymällä tiedot JSON-muodossa palvelin (erityisesti PHP:n kautta) tarjoaa mahdollisuuden käsitellä ne sellaisenaan ja palauttaa tuloksen takaisin selaimeen vastaavassa muodossa. PHP-lähdetaulukko:

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

Muunna JSON-muotoon toimitettavaksi 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ä "itseensä" automaattisella indeksillä "0" ja sitten uudelleen määritetyllä indeksillä "z".

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

Pesätaso

Elementit voidaan upottaa sekä selaimen että palvelimen puolelle. Käytännössä JSON-muoto (RFC 4627 -standardin kuvaus) 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ä; tämä tekee koodista luettavan, mikä helpottaa virheenkorjausta ja sen ymmärtämistä muiden kehittäjien kannalta.

JSON:ia kutsutaan yleisesti tietorakenteiksi, jotka ovat XML:ää yksinkertaisempia ja ymmärrettäviä sekä ihmisille että tietokoneille. Tämä pätee, kun tietomäärä on pieni ja kehittäjä on valinnut sisäkkäisyyden tason viisaasti. Kaikissa muissa tapauksissa hakasulkeiden määrän laskeminen ja ymmärtäminen on vaikeaa sekä selain- että palvelinpuolella.

JSON-tiedostot

JSONin käyttö käytännössä ei useinkaan rajoitu ihmisen luettavaan lyhytmerkkijonoon. Kaikki datan rakentaminen on aina pragmaattista. Samalla JSON:ia voidaan käyttää tehokkaasti sekä todellisissa tehtävätiedoissa (yrityksen henkilöstö) että tilapäisten tietojen toteuttamiseen (objektivälimuisti).

Yrityshenkilöstö ja JSON-muoto: esimerkki

Yleensä tietue yhdestä henkilöstä on sukunimi, etunimi, sukunimi, syntymävuosi, erikoisala, koulutus, ... ja muutama muu yksinkertainen arvo. Edes erityisen vaativissa yrityksissä yhden henkilön ennätys ei ylitä tusinaa tai kahta kenttää. Tämä on havaittavissa ja voidaan sijoittaa tietokantamerkkijonoon.

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

JSON on pelkkä tekstitiedosto. Henkilöstötaulukon tapaus on sanomattakin selvää. Voit aina lukea sen. Avaus ja muokkaus on mahdollista myös missä tahansa tekstieditorissa, jolla ei ole tapana lisätä omia 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 värillistä 3D-tulostusta mukeille ja keramiikalle. Luonnollisesti tällaisen JSON-muodon käyttäminen on todella ongelmallista päättää, kuinka se avataan. Tässä ja vastaavissa tapauksissa tiedoston lukemisessa ei kuitenkaan ole ongelmia: PHP lukee tiedoston, jäsentää sen ja välittää sen selaimelle. 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

"Kaikella on aikansa" on klassinen tieto, joka hyväksyttiin aksioomaksi jo ennen ohjelmoinnin tuloa. "Mikään ei vain näy" - tämä tapahtui myös ennen kuin ihminen kirjoitti ensimmäisen ymmärrettävän ohjelman keinotekoisella kielellä.

Tietomuodot syntyvät todellisista tarpeista ja perustuvat saavutettuun tietoon. HTML:llä on oma polkunsa, XML:llä oma polkunsa ja JSON on JavaScript-objektilogiikka, joka on laajennettu muille kielille. Toistensa vertaaminen ei ole parasta. Jokaiselle omansa.

XML selviää tehtävistään loistavasti, eikä siitä selvästikään tule historiaa. Ja JSON:ia käytettiin vuoteen 2006 asti; kaikki kehittäjät eivät vain pitäneet velvollisuutenaan ilmoittaa tietyt vaihtoehdot tietojensa esittämiseksi.

Käytännössä on ollut tapauksia, joissa BASIC-kielellä on kirjoitettu ohjelmia, jotka eivät käyttäneet JSON:ia sellaisenaan, vaan tallensivat täydellisesti ”nimi = arvo” -parit ja asettivat 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ää. Tämä on todella hieno muoto, mutta kyvyllä erottaa ja liittyä, manipuloida merkkijonoja ja taulukoita, on paljon syvemmät juuret.

JavaScript-kielen join/split- ja PHP-kielen implode/explode-toiminnot antavat sinun käyttää kätevästi ja tehokkaasti sekä XML-, JSON-tietomuotoja että omaa versiotasi. Jälkimmäinen on usein optimaalinen, kun taas kaksi ensimmäistä ovat ihanteellisia yleiskäyttöön. Jos tietoja siirretään toiselle kehittäjälle, palvelimelle, tiedostolle tai tietokantaan, ei ole parempaa tapaa löytää XML ja JSON. Kaikki työskentelevät heidän kanssaan, joten tiedon välitys/vastaanotto ei vaadi kommentteja.

JSONin käyttö Androidissa

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

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

Assosiatiiviset taulukot

Se tapahtuu niin, että muuttujat täytyy kuvata (JavaScript) tai ainakin alkuarvo on määritettävä (PHP). Molemmissa tapauksissa muuttuja voi vaihtaa 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 vastaavat syntaktiset rakenteet seuraavat käyttöpaikkaa.

Tämä seikka on erityisen selvä PHP:ssä, mutta voit sietää sen, kuten myös "$" -symbolin muuttujan nimessä ja "$this->" -yhdistelmän kanssa objektin sisällä. Ohjelmoimalla JavaScriptillä ja PHP:llä samaan aikaan olet todella hämmästynyt siitä, kuinka erilaista kaikki on, mutta sitten kaikesta tulee niin tuttua ja luonnollista...

Associative Array -> JSON

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

Toinen taulukko sisältää tiedot sivulle:

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

Asiakirja luodaan palvelimelle, johon PHPOffice/PHPWord-kirjasto on asennettu. Sivuston avulla voit hallita näiden taulukoiden arvoja JavaScriptin avulla. Tulos JSON-muodossa palautetaan takaisin palvelimelle ja sitä käytetään PHP-algoritmeissa, sen konstrukteissa eli taulukoissa.

Dynaamiset muuttujat

JSON-muoto ratkaisee dynaamisten muuttujien ongelman. Täällä voit luoda, muuttaa 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ö. Hieman myöhemmin Status-muuttuja lisätään.

Ensimmäisen poistooperaattorin jälkeen ojInfo-rivi menettää ikäelementin, toisen poiston jälkeen työelementin. Jos oletetaan, että tämä merkkijono on valikoima muuttujia, joilla on tietty merkitys, niin JSON:ia käyttämällä voit itse asiassa luoda, muuttaa ja poistaa mitä tahansa joukkoja niistä 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ää.

Olet varmasti koskaan kuullut JSONista. Mikä se on? Mitä se voi tehdä ja miten sitä käytetään?

Tässä opetusohjelmassa käsittelemme JSONin perusteita ja käsittelemme seuraavat seikat:

  • Mikä on JSON?
  • Mihin JSONia käytetään?
  • Miten luodaan JSON-merkkijono?
  • Yksinkertainen esimerkki JSON-merkkijonosta.
  • Verrataanpa JSONia ja XML:ää.
  • Kuinka työskennellä JSONin kanssa JavaScriptissä ja PHP:ssä?
Mikä on JSON?

JSON on yksinkertainen, tekstipohjainen tapa tallentaa ja lähettää strukturoitua dataa. Yksinkertaisella syntaksilla voit helposti tallentaa mitä tahansa yhdestä numerosta merkkijonoihin, taulukoihin ja objekteihin pelkkänä tekstinä. Voit myös linkittää taulukoita ja objekteja yhteen monimutkaisten tietorakenteiden luomiseksi.

Kun JSON-merkkijono on luotu, se on helppo lähettää toiseen sovellukseen tai toiseen paikkaan verkossa, koska se on pelkkää tekstiä.

JSON:lla on seuraavat edut:

  • Se on kompakti.
  • Sen lauseita on helppo lukea ja kirjoittaa sekä ihmisten että tietokoneiden toimesta.
  • Se voidaan helposti muuntaa tietorakenteeksi useimmille ohjelmointikielille (numerot, merkkijonot, loogiset arvot, taulukot jne.)
  • Monilla ohjelmointikielillä on toimintoja ja kirjastoja JSON-rakenteiden lukemista ja luomista varten.

Nimi JSON tulee sanoista JavaScript Object Notation. Kuten nimestä voi päätellä, se perustuu tapaan määrittää objektit (kuten assosiatiivisten taulukoiden luominen muilla kielillä) ja taulukoita.

Mihin JSONia käytetään?

Yleisin JSONin käyttötapa on tietojen lähettäminen palvelimelta selaimeen. Tyypillisesti JSON-tiedot toimitetaan AJAX:n avulla, jolloin selain ja palvelin voivat kommunikoida ilman, että sivua tarvitsee ladata uudelleen.

  • Käyttäjä napsauttaa tuotteen pikkukuvaa verkkokaupassa.
  • Selaimessa toimiva JavaScript luo AJAX-pyynnön palvelimella toimivalle PHP-skriptille välittäen valitun tuotteen tunnuksen.
  • PHP-skripti saa tietokannasta tuotteen nimen, kuvauksen, hinnan ja muut tiedot. Sitten se muodostaa tiedoista JSON-merkkijonon ja lähettää sen selaimeen.
  • Selaimessa toimiva JavaScript vastaanottaa JSON-merkkijonon, purkaa sen ja näyttää tuotetiedot sivulla käyttäjälle.
  • Voit myös käyttää JSONia tietojen lähettämiseen selaimesta palvelimelle välittämällä JSON-merkkijonon parametrina GET- tai POST-pyyntöihin. Mutta tämä menetelmä on vähemmän yleinen, koska tiedonsiirtoa AJAX-pyyntöjen kautta voidaan yksinkertaistaa. Esimerkiksi tuotetunnus voidaan sisällyttää URL-osoitteeseen osana GET-pyyntöä.

    jQuery-kirjastossa on useita menetelmiä, kuten getJSON() ja parseJSON(), joiden avulla on helppoa noutaa tietoja JSON:n avulla AJAX-pyyntöjen kautta.

    Miten luodaan JSON-merkkijono?

    JSON-merkkijonon luomiseen on muutamia perussääntöjä:

    • JSON-merkkijono sisältää joko arvojen joukon tai objektin (nimi/arvo-parien assosiatiivinen taulukko).
    • Array on suljettu hakasulkeissa ([ ja ]) ja sisältää pilkuilla erotetun arvoluettelon.
    • Esine on suljettu aaltosulkeisiin (( ja )) ja sisältää pilkuilla erotetun luettelon nimi/arvo-pareista.
    • nimi/arvo-pari koostuu lainausmerkeissä olevasta kentän nimestä, jota seuraa kaksoispiste (:) ja kentän arvo.
    • Merkitys taulukossa tai objektissa voi olla:
      • Numero (kokonaisluku tai liukuluku)
      • Merkkijono (lainausmerkeissä)
      • Boolen arvo (tosi tai epätosi)
      • Toinen matriisi (hakasulkeissa)
      • Toinen esine (kiharan aaltosulkeiden sisällä)
      • nolla-arvo

    Voit lisätä lainausmerkkejä merkkijonoon käyttämällä kenoviivaa: \" . Kuten monissa ohjelmointikielissä, voit laittaa ohjausmerkit ja heksadesimaalikoodit merkkijonoon lisäämällä niiden eteen kenoviiva. Katso lisätietoja JSON-verkkosivustolta.

    Yksinkertainen JSON-merkkijonoesimerkki

    Alla on esimerkki tilaamisesta JSON-muodossa:

    ( "tilaustunnus": 12345, "shopperName": "Vanya Ivanov", "shopperEmail": " [sähköposti suojattu]", "contents": [ ( "productID": 34, "productName": "Super tuote", "määrä": 1 ), ( "productID": 56, "productName": "Miracle product", "quantity": 3 ) ], "tilausCompleted": tosi )

    Katsotaanpa riviä yksityiskohtaisesti:

    • Luomme objektin käyttämällä kiharoita (( ja )).
    • Objektilla on useita nimi/arvo-pareja: "orderID": 12345 Ominaisuus, jonka nimi on "orderId" ja kokonaislukuarvo 12345 "shopperName": "Vanya Ivanov" ominaisuus, jonka nimi on "shopperName" ja merkkijonoarvo "Vanya Ivanov" " "shopperEmail": " [sähköposti suojattu]" Ominaisuus nimeltä "shopperEmail", jolla on merkkijonoarvo " [sähköposti suojattu]" "contents": [ ... ] Ominaisuus nimeltä "contents", jonka arvo on taulukko "orderCompleted": true Ominaisuus nimeltä "orderCompleted" ja looginen arvo true
    • "Contents"-taulukossa on 2 objektia, jotka edustavat tilauksen yksittäisiä kohteita. Jokainen objekti sisältää 3 ominaisuutta: productID , productName ja määrä .

    Muuten, koska JSON perustuu JavaScript-objektien ilmoittamiseen, voit nopeasti ja helposti tehdä yllä olevasta JSON-merkkijonosta JavaScript-objekti:

    var cart = ( "tilaustunnus": 12345, "shopperName": "Vanya Ivanov", "shopperEmail": " [sähköposti suojattu]", "contents": [ ( "productID": 34, "productName": "Super tuote", "määrä": 1 ), ( "productID": 56, "productName": "Miracle product", "quantity": 3 ) ], "tilausCompleted": tosi );

    JSONin ja XML:n vertailu

    Monin tavoin voit ajatella JSON:ia vaihtoehtona XML:lle, ainakin verkkosovellustilassa. AJAX-konsepti perustui alun perin XML:n käyttöön tiedonsiirrossa palvelimen ja selaimen välillä. Mutta viime vuosina JSONista on tullut yhä suositumpi AJAX-tietojen kuljettamisessa.

    Vaikka XML on todistettu tekniikka, jota käytetään useissa sovelluksissa, JSON:n etuna on kompaktimpi ja helpompi tunnistaa tietomuoto.

    Yllä oleva XML-esimerkkiobjekti näyttäisi tältä:

    tilaustunnus 12345 shopperNimi Vanya Ivanov shopperSähköposti [sähköposti suojattu] sisältö tuoteID 34 tuoteNimi Super tuotteen määrä 1 tuoteID 56 tuoteNimi Miracle tuotteen määrä 3 tilausCompleted true

    XML-versio on huomattavasti suurempi. Todellisuudessa se on 1128 merkkiä pitkä, kun taas JSON-versio on vain 323 merkkiä pitkä. XML-versio on myös melko vaikea ymmärtää.

    Tämä on tietysti radikaali esimerkki. Ja on mahdollista luoda kompaktimpi XML-tietue. Mutta jopa se on huomattavasti pidempi kuin JSON-vastine.

    Työskentely JSON-merkkijonon kanssa JavaScriptissä

    JSON-muodossa on yksinkertainen muoto, mutta JSON-merkkijonon luominen manuaalisesti on melko työlästä. Lisäksi sinun on usein otettava JSON-merkkijono ja muutettava sen sisältö muuttujaksi, jota voidaan käyttää koodissa.

    Useimmissa ohjelmointikielissä on työkaluja, joilla muuttujat muunnetaan helposti JSON-merkkijonoksi ja päinvastoin.

    JSON-merkkijonon luominen muuttujasta

    JavaScriptissä on sisäänrakennettu JSON.stringify()-menetelmä, joka ottaa muuttujan ja palauttaa sen sisältöä edustavan JSON-merkkijonon. Luodaan esimerkiksi JavaScript-objekti, joka sisältää tilaustiedot esimerkistämme, ja luodaan sitten JSON-merkkijono siitä:

    var cart = ( "tilaustunnus": 12345, "shopperName": "Vanya Ivanov", "shopperEmail": " [sähköposti suojattu]", "contents": [ ( "productID": 34, "productName": "Super tuote", "määrä": 1 ), ( "productID": 56, "productName": "Miracle product", "quantity": 3 ) ], "orderCompleted": true ); hälytys (JSON.stringify(cart));

    Tämä koodi tuottaa:

    Huomaa, että JSON.stringify()-menetelmä palauttaa JSON-merkkijonon ilman välilyöntejä. Sitä on vaikeampi lukea, mutta se on kompaktimpi verkon kautta lähetettäväksi.

    On olemassa useita tapoja jäsentää JSON-merkkijono JavaScriptissä, mutta turvallisin ja luotettavin on käyttää sisäänrakennettua JSON.parse()-menetelmää. Se vastaanottaa JSON-merkkijonon ja palauttaa tiedot sisältävän JavaScript-objektin tai -taulukon. Esimerkiksi:

    var jsonString = " \ ( \ "tilaustunnus": 12345, \ "shopperName": "Vanya Ivanov", \ "shopperSähköposti": " [sähköposti suojattu]", \ "sisältö": [ \ ( \ "tuotetunnus": 34, \ "tuotenimi": "supertuote", \ "määrä": 1 \), \ ( \ "tuotetunnus": 56, \ "tuotenimi": "Ihme tavarat", \"määrä": 3\ ) \ ], \"tilausCompleted": tosi \ ) \"; var cart = JSON.parse(jsonString); alert(cart.shopperSähköposti); alert(cart.contents.productName);

    Loimme jsonString-muuttujan, joka sisältää esimerkkitilauksemme JSON-merkkijonon. Sitten välitämme tämän merkkijonon JSON.parse()-menetelmälle, joka luo JSON-tiedot sisältävän objektin ja tallentaa sen cart-muuttujaan. Jäljelle jää vain tarkistaminen näyttämällä sisältötaulukon shopperEmail-objektin ja productName-ominaisuudet.

    Tuloksena saamme seuraavan tuloksen:

    Todellisessa sovelluksessa JavaScript-koodisi vastaanottaisi tilauksen JSON-merkkijonona AJAX-vastauksessa palvelinkomentosarjasta, välittäisi merkkijonon JSON.parse()-menetelmälle ja näyttää sen sitten tietojen avulla käyttäjän sivulla.

    JSON.stringify() ja JSON.parse() sisältävät muita ominaisuuksia, kuten takaisinsoittotoimintojen käyttämisen tiettyjen tietojen mukauttamiseen muuntamiseen. Tällaiset vaihtoehdot ovat erittäin hyödyllisiä muunnettaessa erilaisia ​​​​tietoja oikeiksi JavaScript-objekteiksi.

    Työskentely JSON-merkkijonon kanssa PHP:ssä

    PHP:llä, kuten JavaScriptillä, on sisäänrakennetut toiminnot JSON-merkkijonojen kanssa työskentelemiseen.

    JSON-merkkijonon luominen PHP-muuttujasta

    Funktio json_encode() ottaa PHP-muuttujan ja palauttaa JSON-merkkijonon, joka edustaa muuttujan sisältöä. Tässä on tilausesimerkkimme kirjoitettuna PHP:llä:

    Tämä koodi palauttaa täsmälleen saman JSON-merkkijonon kuin JavaScript-esimerkissä:

    ("orderID":12345,"shopperName":"Vanya Ivanov","shopperEmail":" [sähköposti suojattu]","contents":[("productID":34,"productName":"Supertuote","määrä":1),("tuotetunnus":56"tuotenimi":"ihteellinen tuote","määrä": 3)]"orderCompleted":true)

    Todellisessa sovelluksessa PHP-skriptisi lähettää tämän JSON-merkkijonon osana AJAX-vastausta selaimelle, jossa JavaScript-koodi JSON.parse()-menetelmää käyttäen jäsentää sen takaisin muuttujaksi, joka näytetään käyttäjän sivulla. .

    Voit välittää erilaisia ​​lippuja toisena argumenttina json_encode()-funktiolle. Heidän avullaan voit muuttaa muuttujien sisällön koodausperiaatteet JSON-merkkijonoksi.

    Luo muuttuja JSON-merkkijonosta

    Jos haluat muuntaa JSON-merkkijonon PHP-muuttujaksi, käytä json_decode()-menetelmää. Korvataan esimerkkimme JavaScriptistä JSON.parse()-menetelmällä PHP-koodilla:

    Kuten JavaScript, tämä koodi tuottaa:

    [sähköposti suojattu] Ihme tuote

    Oletusarvoisesti json_decode()-funktio palauttaa JSON-objektit PHP-objekteina. On olemassa yleisiä stdClass-luokan PHP-objekteja. Siksi käytämme -> päästäksemme kohteen ominaisuuksiin yllä olevassa esimerkissä.

    Jos tarvitset JSON-objektin yhdistettynä PHP-taulukkona, sinun on välitettävä true toisena argumenttina json_decode()-funktiolle. Esimerkiksi:

    $cart = json_decode($jsonString, tosi); echo $cart["shopperEmail"] . "
    "; echo $cart["contents"]["productName"] . "
    ";

    Tämä koodi tuottaa saman tulosteen:

    [sähköposti suojattu] Ihme tuote

    Voit myös välittää muita argumentteja json_decode()-funktiolle määrittääksesi rekursion syvyyden ja kuinka käsitellä suuria kokonaislukuja.

    Johtopäätös

    Vaikka JSON on helppo ymmärtää ja käyttää, se on erittäin hyödyllinen ja joustava työkalu tietojen siirtämiseen sovellusten ja tietokoneiden välillä, erityisesti käytettäessä AJAXia. Jos aiot kehittää AJAX-sovelluksen, ei ole epäilystäkään siitä, että JSONista tulee välttämätön työkalu työpajassasi.

    ) ja palvelinten välillä (HTTP-ohjelmistoliitännät). JSON-muoto sopii hyvin myös monimutkaisten dynaamisten rakenteiden tallentamiseen relaatiotietokantoihin tai tiedostovälimuistiin.

    Koska JSON on JavaScript-syntaksin osajoukko, se voidaan nopeasti deserialisoida käyttämällä sisäänrakennettua eval()-funktiota. Lisäksi on mahdollista lisätä täysin toimivia JavaScript-funktioita. PHP:ssä versiosta 5.2.0 alkaen JSON-tuki sisältyy ytimeen json_decode()- ja json_encode()-funktioiden muodossa, jotka itse muuntavat JSON-tietotyypit vastaaviksi PHP-tyypeiksi ja päinvastoin.

    Syntaksi

    JSON on rakennettu kahdelle rakenteelle:

    • Joukko avain/arvo-pareja. Useilla kielillä tämä toteutetaan seuraavasti esine, tietue , rakenne , sanakirja , hash - taulukko , avainlista tai assosiatiivinen matriisi . Avain voi olla vain merkkijono, arvo voi olla vain missä tahansa muodossa.
    • Numeroitu joukko arvoja. Monilla kielillä tämä on toteutettu seuraavasti joukko, vektori, luettelo tai sekvenssi.

    Nämä ovat universaaleja tietorakenteita. Teoriassa kaikki nykyaikaiset ohjelmointikielet tukevat niitä muodossa tai toisessa. Koska JSONia käytetään tietojen vaihtamiseen eri ohjelmointikielten välillä, on järkevää rakentaa se näiden rakenteiden varaan.

    JSONissa käytetään seuraavia lomakkeita:

    • Objekti on järjestämätön joukko nimi/arvo-pareja, jotka on suljettu aaltosulkeisiin ( ). Nimen ja arvon välissä on symboli ": " , ja nimi/arvo-parit erotetaan pilkuilla.
    • Taulukko (yksiulotteinen) on joukko arvoja, joilla on sarjanumerot (indeksit). Taulukko on suljettu hakasulkeisiin. Arvot erotetaan pilkuilla.
    • Arvo voi olla linja lainausmerkeissä, määrä, arvo totta tai väärä, esine, joukko, tai arvo tyhjä. Nämä rakenteet voidaan upottaa toistensa sisään.
    • Merkkijono on järjestetty joukko nollaa tai useampaa Unicode-merkkiä, jotka on suljettu lainausmerkkeihin ja joissa käytetään kenoviivaa. Merkit esitetään yksinkertaisena merkkijonona.
    • Nimi on merkkijono.

    Linja hyvin samanlainen kuin merkkijono kielissä ja Javassa. Määrä myös hyvin samanlainen kuin C- tai Java-numero, paitsi että käytetään vain desimaalimuotoa. Kahden merkin väliin voidaan lisätä välilyöntejä.

    Seuraava esimerkki esittää henkilöä kuvaavan objektin JSON-esityksen. Objektilla on merkkijono etu- ja sukunimikentät, osoitetta kuvaava objekti ja puhelinnumeroluettelon sisältävä matriisi.

    ( "etunimi" : "Ivan" , "sukunimi" : "Ivanov" , "osoite" : ( "katuosoite" : "Moskovskoe sh., 101, apt. 101" , "city" : "Leningrad" , "postalCode" : 101101 ) , "phoneNumbers" : [ "812 123-1234" , "916 123-4567" ] )

    XML:ssä tällainen rakenne näyttäisi suunnilleen tältä:

    Ivan Ivanov Moskovskoe sh., 101, asunto 101 Leningrad 101101 812 123-1234 916 123-4567

    812 123-1234 916 123-4567

    Vertailu YAML:ään

    Sekä toiminnallisesti että syntaktisesti JSON on YAML-kielen osajoukko. Tarkemmin sanottuna YAML 1.2 -spesifikaatiossa todetaan, että "kaikki JSON-tiedostot ovat kelvollisia YAML-tiedostoja." Yleisin YAML-jäsennin voi myös käsitellä JSON:ia. Versiota 1.2 edeltävä YAML-spesifikaatio ei kattanut täysin JSON:ia, mikä johtui ensisijaisesti siitä, että YAML:ssa ei ole UTF-32:n alkuperäistä tukea, sekä vaatimuksen välilyönnistä pilkkuerottimen jälkeen. Lisäksi JSON-määritykset sisälsivät /* */ -tyyliset kommentit.

    Tärkein ero YAML:ssä on joukko syntaksilaajennuksia, joilla ei ole analogeja JSONissa:

    Relaatio: YAML tukee relaatiodataa: YAML-asiakirjassa voit viitata ankkuriin, joka esiintyi aiemmin tiedostossa/virrassa. Rekursiiviset rakenteet voidaan ilmaista tällä tavalla. Laajennettavissa: YAML tukee laajennettavia tietotyyppejä primitiivien lisäksi (eli merkkijonoja, numeroita, booleaneja). Lohkot: YAML:ssä sisennetty lohkosyntaksi on käytettävissä; sen avulla voit kuvata strukturoitua dataa käyttämättä tarpeettomia symboleja (kaikenlaisia ​​sulkumerkkejä, lainausmerkkejä jne.).

    JSON-skeema

    JSON Schema on yksi JSON-dokumentin rakenteen kuvailevista kielistä. Käyttää JSON-syntaksia. Perustuu käsitteisiin XML Schema, RelaxNG, Kwalify. JSON Schema on itsekuvaava kieli: käytettäessä samoja serialisointi-/deserialisointityökaluja voidaan käyttää tietojen käsittelyyn ja sen oikeellisuuden kuvaamiseen.

    JSONin käyttö Ajaxissa

    Seuraava esimerkki Javascript-koodista näyttää, kuinka selain voi pyytää XMLHttpRequestin avulla JSON-muotoista objektia palvelimelta (ohjelman palvelinpuoli jätetään pois; sen on sisällettävä koodi, joka lähettää tiedot JSON-merkkijonona vastauksena käyttäjän pyyntöihin url).

    Muuta_objekti; var http_pyyntö = new XMLHttpRequest() ; http_request.open("GET", url, tosi); http_request.send(null); http_request.onreadystatechange = function () ( if ( http_request.readyState == 4 ) ( if ( http_request.status == 200 ) ( the_object = JSON.parse ( http_request.responseText ) ; ) else ( hälytys oli ongelma ( "There" URL." ) ; ) http_request = null ; ) ) ;

    Huomaa, että tämä esimerkki XMLHttpRequestin käytöstä ei ole yleinen kaikille selaimille (Internet Exploreriin, Operaan, Safariin ja Mozillaan perustuvien selaimien koodissa pitäisi olla joitain eroja). XMLHttpRequestin käyttöä rajoittaa sama alkuperäkäytäntö: pyyntöön annetun vastauksen URL-osoitteen on oltava samassa DNS-toimialueessa kuin palvelin, jolla vastausta pyytävä sivu sijaitsee. Vaihtoehtona on JSONP-lähestymistapa, jossa käytetään koodattua toimintokutsua, joka välitetään asiakkaan ja palvelimen välillä, jotta asiakas voi ladata JSON-koodattuja tietoja kolmannen osapuolen toimialueilta ja ilmoittaa soittajalle valmistumisesta, vaikka tähän liittyykin joitain turvallisuusriskejä ja palvelimen lisävaatimukset.

    Vaihtoehtoisesti sivukoodi voi käyttää elementtejä JSON-tietojen pyytämiseen asynkronisesti tai yksinkertaisesti . Nämä lähestymistavat olivat yleisiä ennen XMLHttpRequestin laajaa tukea.

    Voit myös käyttää samaa alkuperäkäytäntöä JSON-tietojen siirtämiseen dynaamisten tunnisteiden avulla, mutta tämä johtaa haavoittuvaiseen koodiin. Turvallisempana vaihtoehtona sen käyttöä on ehdotettu JSONRequest.

    Turvallisuuskysymykset

    Vaikka JSON on suunniteltu siirtämään tietoja sarjoitetussa muodossa, sen syntaksi noudattaa JavaScriptin syntaksia, mikä aiheuttaa useita tietoturvaongelmia. Usein ulkoisesta lähteestä JSON-muodossa vastaanotettujen tietojen käsittelemiseksi eval()-funktiota käytetään siihen ilman ennakkotarkistusta.

    JavaScript eval()

    Koska JSON näyttää olevan syntaktisesti oikea JavaScript-koodin osa, yksinkertaisin tapa jäsentää JSON-tietoja JavaScript-ohjelmassa on käyttää sisäänrakennettua JavaScript-funktiota eval(), joka on suunniteltu suorittamaan JavaScript-lausekkeita. Tällä lähestymistavalla ei ole tarvetta käyttää ylimääräisiä jäsentimiä.

    Eval()-tekniikka tekee järjestelmästä haavoittuvan, jos käytettyjen JSON-tietojen lähde ei ole luotettava ( Englanti). Tällaiset tiedot voivat olla haitallista JavaScript-koodia koodinsyöttöhyökkäyksiä varten ( Englanti). Tämän haavoittuvuuden avulla on mahdollista varastaa tietoja ja väärentää todennusta. Haavoittuvuus voidaan kuitenkin poistaa käyttämällä muita tietojen validointityökaluja. Esimerkiksi ennen eval(:n) suorittamista ulkoisesta lähteestä saadut tiedot voidaan vahvistaa säännöllisillä lausekkeilla. JSONin määrittelevä RFC suosittelee seuraavan koodin käyttämistä tarkistaaksesi, onko se JSON-muodon mukainen

    Var my_JSON_object = ! (/[^,:()\[\]0-9.\-+Eaeflnr-u \n\r\t]/ .test ( text.replace (/"(\\.|[^"\\]) )*"/g , "" ) ) ) && eval("(" + teksti + ")" ) ;

    Turvallisempana vaihtoehtona eval(:lle) on ehdotettu uutta funktiota, parseJSON(), joka pystyy käsittelemään vain JSON-tietoja. Se otettiin käyttöön ECMAScript-standardin versiossa 4, ja se kuvataan artikkelissa "JSON: Low-Fat Alternative to XML". Se on tällä hetkellä saatavana JavaScript-kirjastona ja sisällytetään ECMAScriptin viidenteen painokseen.

    Upotettu JSON

    Uusimmissa verkkoselaimien versioissa on sisäänrakennettu tuki JSONille, ja ne pystyvät käsittelemään sitä kutsumatta eval()-funktiota, mikä johtaa kuvattuun ongelmaan. JSON-käsittely on yleensä nopeampaa tässä tapauksessa. Joten kesäkuussa 2009 seuraavissa selaimissa oli sisäänrakennettu JSON-tuki:

    Ainakin viisi suosittua JavaScript-kirjastoa käyttää sisäänrakennettua JSON-tiedostoa, kun se on saatavilla:

    Verkkotunnusten välinen pyyntöväärennös

    JSONin huono käyttö tekee sivustoista haavoittuvia sivustojen välisille pyyntöjen väärennöksille (CSRF tai XSRF). Koska tagi sallii lähteen käytön, joka ei kuulu samaan verkkotunnukseen kuin sitä käyttävä resurssi, se mahdollistaa koodin suorittamisen JSON-tietojen varjolla mielivaltaisen sivun yhteydessä, mikä mahdollistaa salasanojen tai salasanojen vaarantamisen. muita arkaluonteisia tietoja toiselle sivustolle valtuutetuista käyttäjistä.

    Tämä näyttää olevan ongelma vain, jos JSON-tiedot sisältävät arkaluontoisia tietoja, jotka kolmas osapuoli voi vaarantaa, ja jos palvelin luottaa yhden alkuperän käytäntöön ( Englanti), estää pääsyn tietoihin, kun ulkoinen pyyntö havaitaan. Tämä ei ole ongelma, jos palvelin määrittää pyynnön oikeellisuuden ja toimittaa tiedot vain, jos ne ovat oikein. HTTP-evästeitä ei voida käyttää tämän määrittämiseen. HTTP-evästeiden yksinomaista käyttöä käytetään sivustojen välisessä pyynnön väärentämisessä.

    JSONP ja JSONPP

    JSONP (JSON-täyte) tai "JSON-täyte" on JSON:n laajennus, kun takaisinsoittotoiminnon nimi määritetään syöteargumentiksi.

    Tekniikka perustuu siihen, että selaimen suojauskäytäntö sallii tunnisteen käytön muihin palvelimiin kuin palvelimeen, jolta sivu on ladattu.

    Palvelin voi vain palauttaa tietoja käyttämättä JSONP-tekniikkaa (eli vain JSON-tietojen koodausta). Esimerkiksi näin:

    ("paperi": "A4", "laskenta": 5)

    Nämä ovat kuitenkin vain tietoja, eivätkä ne voi vaikuttaa selaimeen.

    JSONP-tekniikalla takaisinsoittotoiminnon nimi välitetään kolmannen osapuolen palvelimelle puhelulinjassa (GET):

    Tässä jsonp-parametri sisältää takaisinsoittofunktion parseResponse nimen.

    Nyt vieras palvelin example.com voi palauttaa seuraavan koodin:

    ParseResponse(( "paperi" : "A4" , "count" : 5 ) )

    Koodi kutsuu nyt ensimmäisen verkkotunnuksen JavaScript-funktiota.

    Idea ehdotettiin alun perin MacPython-blogissa vuonna 2005, ja sitä käyttävät tällä hetkellä monet Web 2.0 -sovellukset, kuten Dojo Toolkit Applications, Google Toolkit Applications ja zanox Web Services. Lisälaajennuksia tähän protokollaan on ehdotettu sisältämään lisäargumentteja, kuten JSONPP:n tuki S3DB-verkkopalveluille.

    Koska JSONP käyttää komentosarjatunnisteita, puhelut ovat pohjimmiltaan avoimia maailmalle. Tästä syystä JSONP ei ehkä sovellu arkaluonteisten tietojen tallentamiseen.

    Etäsivustojen komentosarjatunnisteiden ottaminen käyttöön mahdollistaa sivuston sisällön lähettämisen. Jos etäsivustolla on haavoittuvuuksia, jotka sallivat Javascriptin lisäämisen, ne voivat vaikuttaa myös alkuperäiseen sivustoon.

    JSONPP (parametrisoitu JSON ja täyte) Parametrisoitu JSON täytetyllä - JSONP-idean kehitys

    JSONPP sisältää lähde-URL-osoitteen, JSON-tietoja käsittelevän toiminnon nimen, rivin evalille tietojen vastaanottamisen jälkeen ja rivin evalille tietojen käsittelyn jälkeen:

    JSON_call(SRC, JSONP, JSONPP, ONLOAD) ;

    lopulta kääntyy

    Ans = JSONP(SRC) ( eval(JSONPP(ans) ) ; eval(ONLOAD) ; )

    Yleensä parametrien määrällä ei ole merkitystä itse JSONPP-idealle. SRC, JSONP, JSONPP (ja niiden käsittely palvelinpuolella ja sitten asiakaspuolella) riittää, jotta se on JSONPP.

    Katsotaanpa esimerkkiä työskentelystä S3DB-palvelun kanssa.

    Funktio s3db_jsonpp_call(src, next_eval) ( var call = "call_" + Math .random () .toString () .replace (/\./g, "" ) ; var headID = document.getElementsByTagName ("head" ) [ 0 ] ; var script = document.createElement ("script" ) ; script.id = call; script.type = "text/javascript" ; // käyttäen pehmustettua, parametroitua json src = src+ "&format=json&jsonp=s3db_jsonpp&jsonpp=" + next_eval+ "&onload=remove_element_by_id("" + script.id + "")" ; script.src = src; headID.appendChild (script) ; // nouta vastaus ) funktio s3db_jsonpp(ans, jsonpp) ( eval(jsonpp) ; return ans ; )-funktio remove_element_by_id(id) ( var e = document.getElementById (id) ; e.parentNode .removeChild (e) ; return false ; )

    Esimerkissä funktio s3db_jsonpp_call() luo skriptielementin DOM:iin head-osassa, jonka src vastaa JSONPP-kutsua.

    Kun vastaus on saatu palvelimelta, s3db_jsonpp() kutsutaan - se välitetään puheluparametreissa, kuten sen pitäisi olla JSONP-sääntöjen mukaan.

    Sisällä s3db_jsonpp() eval(jsonpp) käynnistyy ja palauttaa arvon ans.

    Komenton eval(onload) kutsuminen johtaa komentosarjan remove_element_by_id() suorittamiseen luodun skriptin id:llä ja lopulta sen poistamiseen, koska sitä ei käytetä joka tapauksessa, koska esimerkin id luotiin satunnaisesti aivan ohjelman alussa. s3db_jsonpp_call()-funktio. Tämä puhelu on palvelimen vastauksessa.

    Objektiviitteet

    JSON-standardi ei tue objektiviittauksia, mutta Dojo Toolkit näyttää, kuinka standardi JSON voi tukea tällaisia ​​viittauksia lisäkäytäntöjen avulla. Erityisesti dojox.json.ref-moduuli tukee useita linkkien muotoja, mukaan lukien pyöreät, useat, dokumenttien väliset ja laiskot linkit.

    Katso myös Huomautukset
  • YAML Ain't Markup Language (YAML™) -versio 1.2 (englanti) . - Työluonnos 2008-05-11.(linkki ei saavutettavissa - tarina) Haettu 24. syyskuuta 2009.
  • . RedHanded (7. huhtikuuta 2005). Haettu 25. syyskuuta 2012. .
  • Json.Com JSON Schema Proposal (ei käytettävissä linkki - tarina)
  • RFC 4627
  • JSON: rasvaton vaihtoehto XML:lle. Arkistoitu
  • json2.js (englanniksi). Arkistoitu alkuperäisestä 12. helmikuuta 2012. Haettu 24. syyskuuta 2009.
  • Upotetun JSON:n käyttäminen.
  • Upotettu JSON IE8:aan. Arkistoitu alkuperäisestä 12. helmikuuta 2012.
  • Opera Presto 2.5 (englanniksi) (10. maaliskuuta 2010) tuettuja verkkomäärityksiä. Arkistoitu alkuperäisestä 12. helmikuuta 2012. Haettu 29. maaliskuuta 2010.
  • ES 3.1 JSON-objektin toteutus.
  • Lippu #4429lang=en . Arkistoitu alkuperäisestä 12. helmikuuta 2012.
  • Lippu numero 4429 (22. toukokuuta 2009). Arkistoitu alkuperäisestä 12. helmikuuta 2012. Haettu 3. heinäkuuta 2009.
  • Lippu #8111lang=en . Arkistoitu alkuperäisestä 12. helmikuuta 2012.
  • MooTools Core & More 1.3.1. Arkistoitu alkuperäisestä 12. helmikuuta 2012.
  • YUI 2: JSON-apuohjelma (1. syyskuuta 2009). Arkistoitu alkuperäisestä 12. helmikuuta 2012. Haettu 22. lokakuuta 2009.
  • Opi JSON (7. huhtikuuta 2010). Arkistoitu alkuperäisestä 12. helmikuuta 2012. Haettu 7. huhtikuuta 2010.
  • Jeremy Grossman Kehittyneet hyökkäystekniikat Gmailia käyttäviä verkkosovelluksia vastaan. WhiteHat Security. Arkistoitu alkuperäisestä 12. helmikuuta 2012. Haettu 23. syyskuuta 2009.
  • from __future__ import * » Remote JSON - JSONP . bob.pythonmac.org. Arkistoitu alkuperäisestä 12. helmikuuta 2012. Haettu 8. syyskuuta 2008.
  • Almeida, Jonas (11. kesäkuuta 2008). "JSON, JSONP, JSONPP? "(S3DB). Haettu 26.4.2009.
  • RIAspot JSON P Cross Site XHR:lle .(linkki ei käytettävissä - tarina)
  • JSON-viittaukset Dojossa. Arkistoitu alkuperäisestä 12. helmikuuta 2012.
  • Linkit
    • Virallinen kotisivu venäjäksi
    • json.js, json2.js on Douglas Crockfordin kehittämä kirjasto JSON-tietojen käsittelemiseen JavaScriptissä. Laajentaa objektin toJSONString-menetelmällä, joka on sitten läsnä missä tahansa objektissa, ja muuntaa sen JSON-muotoiseksi merkkijonoksi.
    • json-rpc.org (englanniksi)
    Asiakirjan merkintäkieletToimistoasiakirjat

    Oppitunti, jossa tarkastellaan, mitä JSON on ja miten sillä on etuja muihin tietomuotoihin verrattuna.

    JSON-konsepti

    JSON (JavaScript Object Notation) on tekstimuoto tietojen esittämiseen JavaScript-objektien merkinnöissä.

    Tämä tarkoittaa, että JSONin tiedot on järjestetty samalla tavalla kuin JavaScript-objektissa. Mutta toisin kuin jälkimmäinen, JSON-tallennusmuodossa on joitain ominaisuuksia, joista keskustellaan hieman myöhemmin.

    JSONia käytetään yleensä yhdessä AJAX:n kanssa, jotta palvelin voi siirtää tiedot kätevässä muodossa JavaScript-komentosarjaan, joka näyttää sen sitten sivulla.

    JSON-muodon rakenne

    Kuka tahansa, joka tuntee objektien luomisprosessin JavaScriptissä, ei näe mitään uutta JSON-muodon rakenteessa. Tämä johtuu siitä, että JSONin rakenne noudattaa JavaScript-objektin rakennetta tietyin rajoituksin.

    On helpompi ajatella JSON:ia elementeistä koostuvana säilönä. Jokainen elementti tällaisessa säiliössä on tietty rakenneyksikkö, joka koostuu avaimesta ja arvosta.

    Tässä tapauksessa arvo liittyy suoraan avaimeen ja muodostaa ns. avain-arvo-parin. Jotta saat arvon tällaisessa objektissa, sinun on tiedettävä sen avain. Syntaktisesti tällaiset tiedot kirjoitetaan JSON:iin seuraavasti:

    Yllä olevasta merkinnästä näet, että avain on erotettu arvosta kaksoispisteellä (:). Tässä tapauksessa JSON-objektin avain on suljettava lainausmerkeissä. Tämä on ensimmäinen JSON-ominaisuus, joka erottaa sen JavaScript-objektista. Koska JavaScript-objektissa avainta (objektin ominaisuutta) ei tarvitse laittaa lainausmerkkeihin.

    Esimerkiksi objektirakenne, joka on kelvollinen JavaScript-näkökulmasta, mutta ei kelvollinen JSON-näkökulmasta:

    Var person = ( nimi: "Ivan"; ) // JavaScript-objekti

    Varoitus: yritä nimetä avain, jotta et vaikeuta pääsyä tietoihin, ts. Nimeä kirjoitettaessa on suositeltavaa noudattaa kamelin merkintää tai käyttää alaviivaa ("_") sanojen yhdistämiseen.

    JSONin avainarvo voidaan kirjoittaa jossakin seuraavista muodoista: merkkijono, numero, objekti, taulukko, looginen (looginen arvo tosi tai epätosi), null (erityinen JavaScript-arvo).

    Tämä on toinen rajoitus JSONissa, koska JavaScript-objekti voi sisältää minkä tahansa tietotyypin, mukaan lukien funktion.

    Var person = ( "nimi" : "Ivan"; "setName": function() ( console.log(this.name); ) ) // JavaScript-objekti

    Erota yksi elementti (avain-arvo-pari) toisesta käyttämällä pilkkua (,)-merkkiä.

    Harkitse esimerkiksi JSONia, joka koostuu useista tietotyypeistä.

    Huomio: JSON-tietomuoto ei salli kommentteja rakenteessa.

    Työskentely JSONin kanssa JavaScriptissä

    Toisin kuin JavaScript-objekti, JSON on merkkijono.

    Esimerkiksi:

    // Esimerkiksi personData-muuttuja sisältää merkkijonon, joka on JSON var personData = "("nimi":"Ivan","age":37,"mother":("nimi":"Olga","ikä": 58),"lapset":["Masha","Igor","Tanya"],"naimisissa": tosi"koira": nolla)";

    Työskentely JSONin kanssa tapahtuu yleensä kahteen suuntaan:

  • Jäsentäminen on JSON-koodin sisältävän merkkijonon kääntäminen JavaScript-objektiksi.
  • Muunna JavaScript-objekti JSON-merkkijonoksi. Toisin sanoen tämä toiminto tekee päinvastoin kuin jäsentäminen.
  • JSON-jäsennys

    JSON-jäsennys, ts. JSON-merkkijono käännetään JavaScript-objektiksi käyttämällä eval()- tai parse()-menetelmää.

    Käyttämällä eval()-menetelmää:

    // henkilö-muuttuja on JavaScript-objekti, joka saadaan suorittamalla JSON-koodi (merkkijono) var person= eval("("+personData+")");

    JSON.parse()-menetelmän käyttäminen:

    // henkilö-muuttuja on JavaScript-objekti, joka saadaan jäsentämällä JSON-merkkijono var person = JSON.parse(personData);

    JavaScript-objektin muuntaminen JSON-merkkijonoksi

    JavaScript-objektin kääntäminen JSON-merkkijonoksi tapahtuu JSON.stringify()-menetelmällä. Tämä menetelmä toimii päinvastoin kuin JSON.parse()-menetelmä.

    Var personString = JSON.strigify(person);

    JSON-muodon edut

    JSON-tietomuodolla on seuraavat edut:

    • käteviä ja nopeita menetelmiä, jotka on suunniteltu muuntamaan (jäsentämään) JSON-merkkijono JavaScript-objektiksi ja takaisin;
    • selkeä ja yksinkertainen tietorakenne;
    • erittäin pieni koko verrattuna muihin tietomuotoihin (esim. XML). Tämä johtuu siitä, että JSON-muoto sisältää pienimmän mahdollisen muotoilun, ts. Sitä kirjoitettaessa käytetään vain muutamia erikoismerkkejä. Tämä on erittäin tärkeä etu, koska... JSON-muodossa esitetyt tiedot latautuvat nopeammin kuin jos ne esitetään muissa muodoissa.

    Koska tällä formaatilla on niin monia etuja, sitä on käytetty paitsi JavaScriptissä myös monilla muilla kielillä, kuten C, Ruby, Perl, Python, PHP jne.

    JSON- ja XML-muotojen vertailu

    JSON-muodolla on seuraavat edut XML-muotoon verrattuna:

  • Joissakin tiedonsiirroissa JSON-koko on huomattavasti pienempi kuin XML-koko.
  • JSONilla on parempia muunnosmenetelmiä JavaScript-tietorakenteiksi kuin XML.
  • JSON on helpompi luoda kuin XML.
  • JSON-tietojen käsittely jäsentämisen jälkeen tapahtuu JavaScript-objektina.

    //JSON var personData = "("nimi":"Ivan","ikä":37,"äiti":("nimi":"Olga","ikä":58),,"lapset":["Masha" " "Igor","Tanya"],"naimisissa": tosi,"koira": nolla)"; //JavaScript-objekti person var person = JSON.parse(personData);

    Katsotaanpa pääkohtia:

    //hae avaimen (omaisuuden) arvot nimi henkilö.nimi; henkilö["nimi"]; //hae avaimen (ominaisuuden) nimen arvot, jotka sijaitsevat objektissa äiti henkilö.äiti.nimi; //poista ikäelementti delete(person.age) //lisää (tai päivitä) avain (ominaisuus) person.eye = "ruskea"; //työskennellessäsi taulukoiden kanssa tulee käyttää menetelmiä, jotka on suunniteltu toimimaan erityisesti taulukoiden kanssa //poista 1 elementti taulukosta (liitosmenetelmä) person.children.splice(1,1) //lisää elementti taulukkoon (push-menetelmä ) henkilö.lapset. push("Katya");

    Voit iteroida objektin elementtejä käyttämällä for..in -silmukkaa:

    For (avain henkilökohtaisesti) ( if (person.hasOwnProperty(avain)) ( //avain = avain //arvo = henkilö console.log("Key = " + avain); console.log("Arvo = " + henkilö) ; ) // jos henkilöobjektilla on avain (jos henkilöllä on avainominaisuus) ) // iteroi kaikki objektin avaimet (ominaisuudet)

    Voit iteroida taulukon elementtejä käyttämällä seuraavaa silmukkaa:

    For (var i=0; i

    Yleisin ongelma, joka estää käyttäjiä avaamasta tätä tiedostoa, on väärin määritetty ohjelma. Voit korjata tämän Windows-käyttöjärjestelmässä napsauttamalla tiedostoa hiiren kakkospainikkeella kontekstivalikossa, vie hiiri Avaa sovelluksella -kohdan päälle ja valitse avattavasta valikosta "Valitse ohjelma...". Tämän seurauksena näet luettelon tietokoneellesi asennetuista ohjelmista ja voit valita sopivan. Suosittelemme myös valitsemaan valintaruudun Käytä tätä sovellusta kaikille JSON-tiedostoille.

    Toinen ongelma, jonka käyttäjämme kohtaavat melko usein, on se, että JSON-tiedosto on vioittunut. Tämä tilanne voi syntyä monissa tapauksissa. Esimerkki: tiedosto ladattiin epätäydellisesti palvelinvirheen seurauksena, tiedosto oli alun perin vaurioitunut jne. Voit ratkaista tämän ongelman käyttämällä jotakin seuraavista suosituksista:

    • Yritä löytää tarvitsemasi tiedosto toisesta Internet-lähteestä. Sinulla saattaa olla onnea löytää sopivampi versio. Esimerkki Google-hausta: "File filetype:JSON" . Korvaa vain sana "tiedosto" haluamallasi nimellä;
    • Pyydä heitä lähettämään sinulle alkuperäinen tiedosto uudelleen, se on saattanut vaurioitua lähetyksen aikana.