Mainīgie, masīvi un objekti ir pazīstams un ērts datu attēlošanas veids. Ir pieņemts datus aprakstīt pārlūkprogrammas valodā JavaScript, kas nav nepieciešams PHP servera valodā. JSON formāts ļauj tos apkopot vienā veselumā, nevis koncentrēties uz programmēšanas valodu. Šajā gadījumā dati pārvēršas pāros: “nosaukums = vērtība”. Vērtība katrā no tām var būt arī šādu pāru kolekcija.

Ir ierasts saistīt JSON ar krokainajām lencēm, un pēdējais ir diezgan pamatots, jo JSON formāts = JavaScript Object Notation. Pēdējos īpaši dinamiskajos gados daudz kas ir mainījies. Tas, kas tika radīts kādam konkrētam mērķim, bieži nesa negaidītus rezultātus vai pavēra jaunus apvāršņus.

Datu apmaiņa: pārlūkprogramma - serveris

AJAX tehnoloģija ir kļuvusi par tradicionālu, regulāru lapu atsvaidzināšanu pilnībā ir pārstājis būt populārs. Apmeklētājs, atverot vietni, uzsāk virkni daļēju datu apmaiņu, kad noteiktas lapas mainās tikai tajā vietā, kas ir aktuāla.

Tiek uzskatīts, ka JSON rašanās ir saistīta ar AJAX izmantošanu, taču patiesībā asociatīvajam un tā objektu apzīmējumam (objektu aprakstīšanas un izmantošanas sintakses iezīmēm) ir daudz vairāk saistīta saistība ar JSON nekā datu apmaiņa starp pārlūkprogramma un serveris.

Tā kā mūsdienu vietņu lapu saturs patiešām ir kļuvis “masīvs” (apjomīgs), datu apmaiņas formāta efektivitāte ir ieguvusi īpašu nozīmi. Tas nenozīmē, ka JSON ir kļuvis par jaunu datu attēlojumu, taču fakts, ka tas jau sen ir bijis JavaScript sintakses elements, ir nozīmīgs.

Kirilicas izmantošana mainīgo nosaukšanā ir ļoti negaidīta parādība (muļķības), taču tā darbojas jaunākajās Chrome, Firefox un pat Internet Explorer 11 versijās.

Kirilica un JSON

Protams, nav jēgas izmantot šo pilnīgi negaidīto parādību, atceroties, cik viegli mainīgo vērtības, kas rakstītas ar krievu burtiem, pārvēršas par muļķībām: ko mēs varam teikt par nosaukumiem, īpaši ārējiem.

Jāšaubās, vai iniciatīvu kirilicas nosaukumos atbalstīs pārlūkprogrammas ārējā vide, ar kuru tai pastāvīgi jāsaskaras. Bet šis fakts ir pelnījis uzmanību tā vienkāršā iemesla dēļ, ka JSON formāts ir iespēja rakstīt nosaukumus un vērtības, kā to vēlas izstrādātājs. Tas ir svarīgi, jo katrā uzdevumā lietojumprogrammas apgabala apraksts, kas tam nepieciešams, ievērojami vienkāršo atkļūdošanu un samazina kļūdu skaitu.

Nav svarīgi, kas tieši bija sintaktiskā jauninājuma - JSON - pamatā, ir svarīgi, lai tas deva likumīgas tiesības un reālu iespēju iestatīt atbilstību: "jebkurš nosaukums = jebkura vērtība".

Mums ir jāizsaka atzinība JavaScript valodai: tas, ko nodrošina sintakse, neuzliek izstrādātājam pienākumu un neuzliek viņam neko. Izstrādātājs brīvi izmanto valodas sintaksi, lai optimāli izveidotu datu modeli un algoritmu to izmantošanai.

PHP un JSON

Pieņemot datus JSON formātā, serveris (īpaši, izmantojot PHP) nodrošina iespēju apstrādāt tos tādus, kādi tie ir, un atgriezt rezultātu atpakaļ pārlūkprogrammā līdzīgā formātā. PHP avota masīvs:

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

Konvertēt uz JSON, lai to piegādātu pārlūkprogrammā:

  • $cJS = json_encode($cJSON).

Rezultāts:

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

Fotoattēlā redzamā ligzdošana ir atļauta.

Šeit ģenerētais masīvs tika pievienots ar jaunu elementu “sevī” ar automātisko indeksu “0” un pēc tam atkal ar norādīto indeksu “z”.

Json_decode() pārvērš JSON virkni PHP masīvā. Līdzīgus rezultātus var sasniegt, manipulējot ar funkcijām un eksplode (). Dažos gadījumos šī iespēja ir vēlama.

Ligzdošanas līmenis

Elementus var ligzdot gan pārlūkprogrammas pusē, gan servera pusē. Praksē JSON formāts (RFC 4627 standarta apraksts) nodrošina ievērojami vairāk nekā 4 ligzdošanas līmeņus, taču šo funkciju nevajadzētu ļaunprātīgi izmantot.

Vislabāk ir nekad nepārsniegt saprātīgu pietiekamību; tas padara kodu lasāmu, atvieglojot atkļūdošanu un izpratni citiem izstrādātājiem.

JSON parasti sauc par datu konstrukcijām, kas ir vienkāršākas par XML un ir saprotamas gan cilvēkiem, gan datoriem. Tas ir taisnība, ja datu apjoms ir mazs un izstrādātājs ir gudri izvēlējies ligzdošanas līmeni. Visos citos gadījumos iekavu skaita saskaitīšana un izpratne ir sarežģīta gan pārlūkprogrammas, gan servera pusē.

JSON faili

JSON izmantošana praksē bieži vien neaprobežojas tikai ar cilvēkiem lasāmu īsu virkni. Jebkura datu konstrukcija vienmēr ir pragmatiska. Tajā pašā laikā JSON var efektīvi izmantot gan reālos uzdevumu datos (uzņēmuma personāls), gan pagaidu datu ieviešanai (objektu kešatmiņa).

Uzņēmuma darbinieki un JSON formāts: piemērs

Parasti ieraksts par vienu personu ir uzvārds, vārds, uzvārds, dzimšanas gads, specialitāte, izglītība, ... un dažas citas vienkāršas vērtības. Pat īpaši prasīgos uzņēmumos rekords par vienu cilvēku nepārsniegs duci vai divus laukus. Tas ir uztverams, un to var ievietot datu bāzes virknē.

Ja uzņēmumā strādā vairāki cilvēki, tas ir viens, bet, ja ir desmitiem tūkstošu, tas ir pavisam kas cits. Varat turpināt izmantot datu bāzi, taču tās saglabāšana kā fails šķiet praktiskāka un pieejamāka lietošanai.

JSON ir vienkārša teksta fails. Lieta ar personāla tabulu ir pašsaprotama. Jūs vienmēr varat to izlasīt. Atvēršana un rediģēšana ir pieejama arī jebkurā teksta redaktorā, kuram nav ieraduma faila saturam pievienot savu pakalpojumu informāciju. Kopumā *.json ir tīrs teksts gan pārlūkprogrammā, gan faila iekšpusē - virkne.

Fotoattēlā parādīta attēla veidojošā objekta kešatmiņa, piemērs.

Šis ir faila satura piemērs, ko ģenerējusi vietne, kas nodrošina krāsu 3D drukāšanu uz krūzēm un keramikas izstrādājumiem. Protams, ja ir šāds JSON formāts, izlemt, kā to atvērt, ir patiešām problemātiski. Taču šajā un līdzīgos gadījumos ar faila nolasīšanu nav problēmu: PHP nolasa failu, parsē un nodod pārlūkprogrammai. Apmeklētāja izmainītie dati tiek atgriezti serverī un norakstīti atpakaļ.

Šajā lietošanas gadījumā fails darbojas kā mainīgais, kas tiek saglabāts ārpus koda. Ja nepieciešams, mainīgais saņem vērtību no faila, un, ja apmeklētājs to maina vietnes nodrošinātajā dialogā, visas izmaiņas tiks reģistrētas tādas, kādas tās ir. Nav nepieciešams lasīt un pārbaudīt faila saturu.

JSON bieži tiek izmantots pakalpojumu informācijas glabāšanai un lietošanai — tā nav personāla tabula, un tā nav jāredz ne izstrādātājam, ne vietnes apmeklētājam.

XML un JSON

“Visam savs laiks” ir klasiskas zināšanas, kas pieņemtas kā aksioma jau pirms programmēšanas parādīšanās. "Nekas vienkārši neparādās" - tas notika arī pirms cilvēks uzrakstīja pirmo saprotamo programmu mākslīgā valodā.

Datu formāti rodas no reālām vajadzībām un ir balstīti uz iegūtajām zināšanām. HTML ir savs ceļš, XML ir savs ceļš, un JSON ir JavaScript objektu loģika, kas paplašināta arī citās valodās. Salīdzināt viens ar otru nav labākais, ko darīt. Katram savs.

XML lieliski tiek galā ar saviem uzdevumiem un acīmredzami nekļūs par vēsturi. Un JSON tika izmantots līdz 2006. gadam; vienkārši ne katrs izstrādātājs uzskatīja par savu pienākumu deklarēt noteiktas iespējas savu datu attēlošanai.

Praksē ir bijuši gadījumi, kad BASIC valodā tika rakstītas programmas, kas neizmantoja JSON kā tādu, bet lieliski saglabāja pārus “name = value” un darīja tos īstajā laikā pieejamas pareizajiem algoritmiem.

Speciālās rakstzīmes ("`", "~", "|", ...) un datu formāti

Ieradums strādāt ar asociatīvajiem masīviem un objektiem JavaScript padara JSON lietošanu dabisku un ērtu. Šis ir patiešām lielisks formāts, taču spējai atdalīties un pievienoties, manipulējot ar virknēm un masīviem, ir daudz dziļākas saknes.

JavaScript valodas join/split un PHP valodas implode/explode funkcijas ļauj ērti un efektīvi izmantot gan XML, JSON datu formātus, gan savu versiju. Pēdējais bieži vien ir optimāls, savukārt pirmie divi ir ideāli piemēroti vispārējai lietošanai. Ja informācija tiek pārsūtīta uz citu izstrādātāju, serveri, failu vai datu bāzi, nav labāka veida, kā atrast XML un JSON. Ar tiem strādā visi, tāpēc informācijas pārraide/saņemšana komentārus neprasa.

JSON izmantošana operētājsistēmā Android

Datu lasīšana un rakstīšana JSON formātā operētājsistēmā Android ir ne tikai norma, bet ir arī daudzi objekti, kas vērsti uz darbu ar šo konkrēto datu formātu.

Šajā gadījumā tiek izmantots JSON formāts. Tā var būt taisnība, taču jautājums nav par sociālo tīklu fenomenalitāti, bet gan par to, ka informācijas pasniegšana formātā “vārds = vērtība” ir patiešām ērta gan programmēšanai, gan lietošanai. Atšķirībā no stingrā un sarežģītā “XML”, tas patiešām ir cilvēkiem draudzīgs formāts.

Asociatīvie masīvi

Gadās, ka ir jāapraksta mainīgie (JavaScript) vai vismaz jānorāda sākotnējā vērtība (PHP). Abos gadījumos mainīgais var ļoti viegli mainīt tā veidu. Ja nepieciešams, valoda šo konvertēšanu veic automātiski.

Bet kāpēc lai mainīgais arī nemainītu savu nosaukumu, parādītos algoritma izpildes laikā un nepazustu, kad tas vairs nav vajadzīgs? Asociatīvie masīvi atrisina šo problēmu, bet tad, izmantojot šādus relatīvi dinamiskus mainīgos, masīva nosaukums un atbilstošās sintaktiskās konstrukcijas sekos, kur tie tiek izmantoti.

Šis apstāklis ​​ir īpaši izteikts PHP, taču ar to var samierināties, tāpat kā ar simbolu “$” mainīgā nosaukumā un kombināciju “$this->” objekta iekšpusē. Programmējot JavaScript un PHP vienlaicīgi, sākumā tiešām brīnies, cik viss ir dažādi, bet tad viss kļūst tik pazīstams un dabisks...

Asociatīvais masīvs —> JSON

Šajā piemērā *.docx dokuments tiek izveidots, izmantojot PHPOffice/PHPWord bibliotēku, un masīvā aProperties ir šī dokumenta rekvizīti (autors, uzņēmums, nosaukums, kategorija, izveides datums...).

Otrajā masīvā ir dati par lapu:

  • orientācija (ainava vai parasta);
  • vertikālie un horizontālie izmēri;
  • atkāpes (malas pa kreisi, augšā, apakšā, pa labi);
  • galvenes un kājenes.

Dokuments tiek ģenerēts serverī, kurā ir instalēta PHPOffice/PHPWord bibliotēka. Vietne ļauj pārvaldīt šo masīvu vērtības, izmantojot JavaScript. Rezultāts JSON formātā tiek atgriezts atpakaļ serverī un tiek izmantots PHP algoritmos, tā konstrukcijās, tas ir, masīvos.

Dinamiskie mainīgie

JSON formāts atrisina dinamisko mainīgo problēmu. Šeit jūs varat izveidot, mainīt un dzēst mainīgos bez liekas sintaktiskās jucekļa. Tas izskatās jauki un tiek izmantots JavaScript.

Šajā piemērā funkcija GetOjInfo() izgūst vērtības nosaukumu un vērtību no objekta. Sākotnēji JSON virknes objektam, kas piešķirts mainīgajam ojInfo, ir trīs elementi: vārds, vecums un darbs. Nedaudz vēlāk tiek pievienots statusa mainīgais.

Pēc pirmā dzēšanas operatora ojInfo rinda zaudē vecuma elementu, pēc otrās dzēšanas zaudē darba elementu. Ja pieņemam, ka šī virkne ir mainīgo lielumu izlase, kam ir noteikta nozīme, tad, izmantojot JSON, jūs faktiski varat izveidot, mainīt un dzēst jebkuras to kopas ārpus JavaScript valodas aprakstīšanas un apstrādes darbības lauka (sintakses).

JSON formāts nebija paredzēts šai opcijai, taču tas ir iespējams, praktiski un ērti.

Noteikti jūs kādreiz esat dzirdējuši par JSON. Kas tas ir? Ko tas var darīt un kā to izmantot?

Šajā apmācībā mēs apskatīsim JSON pamatus un šādus punktus:

  • Kas ir JSON?
  • Kam tiek izmantots JSON?
  • Kā izveidot JSON virkni?
  • Vienkāršs JSON virknes piemērs.
  • Salīdzināsim JSON un XML.
  • Kā strādāt ar JSON JavaScript un PHP?
Kas ir JSON?

JSON ir vienkāršs, uz tekstu balstīts veids, kā uzglabāt un pārsūtīt strukturētus datus. Izmantojot vienkāršu sintaksi, varat viegli saglabāt jebko, sākot no viena skaitļa līdz virknēm, masīviem un objektiem vienkāršā tekstā. Varat arī saistīt masīvus un objektus kopā, lai izveidotu sarežģītas datu struktūras.

Kad JSON virkne ir izveidota, to ir viegli nosūtīt uz citu lietojumprogrammu vai citu vietu tīklā, jo tā ir vienkāršs teksts.

JSON ir šādas priekšrocības:

  • Tas ir kompakts.
  • Tā teikumus ir viegli lasīt un salikt gan cilvēkiem, gan datoriem.
  • To var viegli pārveidot par datu struktūru lielākajai daļai programmēšanas valodu (skaitļi, virknes, Būla vērtības, masīvi utt.)
  • Daudzām programmēšanas valodām ir funkcijas un bibliotēkas JSON struktūru lasīšanai un izveidei.

Nosaukums JSON apzīmē JavaScript objektu notāciju. Kā norāda nosaukums, tas ir balstīts uz veidu, kā definēt objektus (līdzīgi kā asociatīvo masīvu izveidi citās valodās) un masīvus.

Kam tiek izmantots JSON?

Visizplatītākais JSON lietojums ir datu sūtīšana no servera uz pārlūkprogrammu. Parasti JSON dati tiek piegādāti, izmantojot AJAX, kas ļauj pārlūkprogrammai un serverim sazināties bez nepieciešamības atkārtoti ielādēt lapu.

  • Lietotājs tiešsaistes veikalā noklikšķina uz produkta sīktēla.
  • JavaScript, kas darbojas pārlūkprogrammā, ģenerē AJAX pieprasījumu PHP skriptam, kas darbojas serverī, nododot atlasītā produkta ID.
  • PHP skripts no datu bāzes iegūst produkta nosaukumu, aprakstu, cenu un citu informāciju. Pēc tam tas no datiem izveido JSON virkni un nosūta to pārlūkprogrammai.
  • JavaScript, kas darbojas pārlūkprogrammā, saņem JSON virkni, atkodē to un lietotājam lapā parāda produkta informāciju.
  • Varat arī izmantot JSON, lai nosūtītu datus no pārlūkprogrammas uz serveri, nosūtot JSON virkni kā parametru GET vai POST pieprasījumiem. Bet šī metode ir mazāk izplatīta, jo datu pārsūtīšanu, izmantojot AJAX pieprasījumus, var vienkāršot. Piemēram, produkta ID var tikt iekļauts vietrādī URL kā daļa no GET pieprasījuma.

    jQuery bibliotēkai ir vairākas metodes, piemēram, getJSON() un parseJSON(), kas atvieglo datu izgūšanu, izmantojot JSON, izmantojot AJAX pieprasījumus.

    Kā izveidot JSON virkni?

    Ir daži pamatnoteikumi JSON virknes izveidei:

    • JSON virknē ir vai nu vērtību masīvs, vai objekts (nosaukuma/vērtību pāru asociatīvais masīvs).
    • Masīvs ir ietverts kvadrātiekavās ([ un ]) un satur komatu atdalītu vērtību sarakstu.
    • Objekts ir ietverts krokainajās iekavās (( un )) un satur ar komatu atdalītu nosaukumu/vērtību pāru sarakstu.
    • vārda/vērtības pāris sastāv no lauka nosaukuma, kas ievietots pēdiņās, kam seko kols (:) un lauka vērtība.
    • Nozīme masīvā vai objektā var būt:
      • Skaitlis (vesels skaitlis vai peldošais punkts)
      • Virkne (dubultpēdiņās)
      • Būla vērtība (patiesa vai nepatiesa)
      • Cits masīvs (ielikts kvadrātiekavās)
      • Cits priekšmets (iekļauts cirtainajās lencēs)
      • nulles vērtība

    Lai virknē iekļautu dubultpēdiņas, ir jāizmanto atpakaļvērstā slīpsvītra: \" . Tāpat kā daudzās programmēšanas valodās, virknē varat ievietot vadības rakstzīmes un heksadesimālos kodus, pirms tiem izmantojot atpakaļvērstās slīpsvītras. Detalizētu informāciju skatiet JSON vietnē.

    Vienkāršs JSON virknes piemērs

    Tālāk ir sniegts JSON formāta pasūtīšanas piemērs.

    ( "orderID": 12345, "shopperName": "Vanya Ivanov", "shopperEmail": " [aizsargāts ar e-pastu]", "contents": [ ( "productID": 34, "productName": "Super produkts", "quantity": 1 ), ( "productID": 56, "productName": "Miracle product", "quantity": 3 ) ], "pasūtījumsPabeigts": patiess )

    Apskatīsim līniju sīkāk:

    • Mēs izveidojam objektu, izmantojot cirtaini lencēm (( un )).
    • Objektam ir vairāki nosaukumu/vērtību pāri: "orderID": 12345 Rekvizīts ar nosaukumu "orderId" un vesela skaitļa vērtību 12345 "shopperName": "Vanya Ivanov" rekvizīts ar nosaukumu "shopperName" un virknes vērtību "Vanya Ivanov" " "shopperEmail": " [aizsargāts ar e-pastu]" Īpašums ar nosaukumu "shopperEmail" ar virknes vērtību " [aizsargāts ar e-pastu]" "contents": [ ... ] Rekvizīts ar nosaukumu "contents", kura vērtība ir masīvs "orderCompleted": true Rekvizīts ar nosaukumu "orderCompleted" un Būla vērtība true
    • Masīvā "saturs" ir 2 objekti, kas attēlo atsevišķus pasūtījuma vienumus. Katrs objekts satur 3 rekvizītus: produkta ID , produkta nosaukums un daudzums.

    Starp citu, tā kā JSON pamatā ir JavaScript objektu deklarēšana, varat ātri un vienkārši padarīt iepriekš minēto JSON virkni par JavaScript objektu:

    var cart = ( "pasūtījuma ID": 12345, "shopperName": "Vanya Ivanov", "shopperEmail": " [aizsargāts ar e-pastu]", "contents": [ ( "productID": 34, "productName": "Super produkts", "quantity": 1 ), ( "productID": 56, "productName": "Miracle product", "quantity": 3 ) ], "orderCompleted": true );

    JSON un XML salīdzinājums

    Daudzos veidos varat domāt par JSON kā alternatīvu XML, vismaz tīmekļa lietojumprogrammu telpā. AJAX koncepcija sākotnēji balstījās uz XML izmantošanu datu pārsūtīšanai starp serveri un pārlūkprogrammu. Taču pēdējos gados JSON ir kļuvis arvien populārāks AJAX datu pārsūtīšanai.

    Lai gan XML ir pārbaudīta tehnoloģija, ko izmanto diezgan daudzās lietojumprogrammās, JSON priekšrocība ir tā, ka tas ir kompaktāks un vieglāk atpazīstams datu formāts.

    Šādi izskatītos iepriekš minētais objekta piemērs XML formātā:

    pasūtījumaID 12345 pircējsVārds Vaņa Ivanova pircējaE-pasts [aizsargāts ar e-pastu] saturs productID 34 productName Superpreces daudzums 1 productID 56 productName brīnumpreces daudzums 3 pasūtījumsPabeigts true

    XML versija ir ievērojami lielāka. Patiesībā tas ir 1128 rakstzīmes garš, savukārt JSON versija ir tikai 323 rakstzīmes garš. Arī XML versiju ir diezgan grūti saprast.

    Protams, tas ir radikāls piemērs. Un ir iespējams izveidot kompaktāku XML ierakstu. Bet pat tas būs ievērojami garāks nekā JSON ekvivalents.

    Darbs ar JSON virkni JavaScript

    JSON ir vienkāršs formāts, taču manuāli izveidot JSON virkni ir diezgan nogurdinoši. Turklāt jums bieži ir jāizmanto JSON virkne, tās saturs jāpārvērš mainīgā, ko var izmantot kodā.

    Lielākajai daļai programmēšanas valodu ir rīki, lai viegli pārveidotu mainīgos par JSON virknēm un otrādi.

    JSON virknes izveide no mainīgā

    JavaScript ir iebūvēta metode JSON.stringify(), kas izmanto mainīgo un atgriež JSON virkni, kas atspoguļo tā saturu. Piemēram, izveidosim JavaScript objektu, kas satur pasūtījuma informāciju no mūsu piemēra, un pēc tam izveidosim no tā JSON virkni:

    var cart = ( "pasūtījuma ID": 12345, "shopperName": "Vanya Ivanov", "shopperEmail": " [aizsargāts ar e-pastu]", "contents": [ ( "productID": 34, "productName": "Super produkts", "quantity": 1 ), ( "productID": 56, "productName": "Miracle product", "quantity": 3 ) ], "orderCompleted": true ); brīdinājums (JSON.stringify(grozs));

    Šis kods radīs:

    Ņemiet vērā, ka metode JSON.stringify() atgriež JSON virkni bez atstarpēm. To ir grūtāk nolasīt, taču tas ir kompaktāks pārraidei tīklā.

    Ir vairāki veidi, kā parsēt JSON virkni JavaScript, taču visdrošākais un uzticamākais ir izmantot iebūvēto JSON.parse() metodi. Tas saņem JSON virkni un atgriež JavaScript objektu vai masīvu, kas satur datus. Piemēram:

    var jsonString = " \ ( \ "pasūtījuma ID": 12345, \ "shopperName": "Vanya Ivanov", \ "shopperEmail": " [aizsargāts ar e-pastu]", \ "saturs": [ \ ( \ "productID": 34, \ "productName": "Super produkts", \ "quantity": 1 \), \ ( \ "productID": 56, \ "productName": "Brīnumpreces", \"daudzums": 3\ ) \ ], \"pasūtījumsPabeigts": patiess \ ) \"; var grozs = JSON.parse(jsonString); brīdinājums(grozs.pircējsE-pasts); brīdinājums(grozs.contents.productName);

    Mēs izveidojām jsonString mainīgo, kas satur mūsu parauga secības JSON virkni. Pēc tam šo virkni nododam metodei JSON.parse(), kas izveido objektu, kurā ir JSON dati, un saglabā to groza mainīgajā. Atliek tikai pārbaudīt, parādot satura masīva shopperEmail objekta un productName rekvizītus.

    Rezultātā mēs iegūsim šādu rezultātu:

    Reālā lietojumprogrammā jūsu JavaScript kods saņems pasūtījumu kā JSON virkni AJAX atbildē no servera skripta, nodod virkni JSON.parse() metodei un pēc tam izmantos datus, lai to parādītu lietotāja lapā.

    JSON.stringify() un JSON.parse() ir citas iespējas, piemēram, izmantot atzvanīšanas funkcijas, lai pielāgotu konvertētu noteiktus datus. Šādas opcijas ir ļoti noderīgas dažādu datu pārveidošanai atbilstošos JavaScript objektos.

    Darbs ar JSON virkni PHP

    PHP, tāpat kā JavaScript, ir iebūvētas funkcijas darbam ar JSON virknēm.

    JSON virknes izveide no PHP mainīgā

    Funkcija json_encode() izmanto PHP mainīgo un atgriež JSON virkni, kas atspoguļo mainīgā saturu. Šeit ir mūsu pasūtījuma piemērs, kas rakstīts PHP:

    Šis kods atgriež tieši tādu pašu JSON virkni kā JavaScript piemērā:

    ("orderID":12345,"shopperName":"Vanya Ivanov","shopperEmail":" [aizsargāts ar e-pastu]""contents":[("productID":34,"productName":"Super produkts","quantity":1),("productID":56,"productName":"Brīnums produkts","daudzums": 3)]"orderCompleted":true)

    Reālā lietojumprogrammā jūsu PHP skripts nosūtīs šo JSON virkni kā daļu no AJAX atbildes uz pārlūkprogrammu, kur JavaScript kods, izmantojot metodi JSON.parse(), parsēs to atpakaļ mainīgajā, lai to parādītu lietotāja lapā. .

    Kā otro argumentu funkcijai json_encode() varat nodot dažādus karogus. Ar viņu palīdzību jūs varat mainīt mainīgo satura kodēšanas principus JSON virknē.

    Izveidojiet mainīgo no JSON virknes

    Lai JSON virkni pārveidotu par PHP mainīgo, izmantojiet metodi json_decode(). Aizstāsim mūsu JavaScript piemēru ar JSON.parse() metodi ar PHP kodu:

    Tāpat kā JavaScript, šis kods radīs:

    [aizsargāts ar e-pastu] Brīnumprodukts

    Pēc noklusējuma funkcija json_decode() atgriež JSON objektus kā PHP objektus. Ir vispārīgi stdClass klases PHP objekti. Tāpēc mēs izmantojam ->, lai piekļūtu objekta īpašībām iepriekš minētajā piemērā.

    Ja jums ir nepieciešams JSON objekts kā saistīts PHP masīvs, funkcijai json_decode() ir jānodod true kā otrais arguments. Piemēram:

    $grozs = json_decode($jsonString, patiess); echo $grozs["shopperEmail"] . "
    "; echo $grozs["saturs"]["produkta nosaukums"] . "
    ";

    Šis kods radīs tādu pašu izvadi:

    [aizsargāts ar e-pastu] Brīnumprodukts

    Varat arī nodot citus argumentus funkcijai json_decode(), lai norādītu rekursijas dziļumu un to, kā rīkoties ar lieliem veseliem skaitļiem.

    Secinājums

    Lai gan JSON ir viegli saprotams un lietojams, tas ir ļoti noderīgs un elastīgs rīks datu pārsūtīšanai starp lietojumprogrammām un datoriem, īpaši, ja tiek izmantots AJAX. Ja plānojat izstrādāt AJAX lietojumprogrammu, tad nav šaubu, ka JSON kļūs par būtisku rīku jūsu darbnīcā.

    ), un starp pašiem serveriem (HTTP programmatūras saskarnes). JSON formāts ir labi piemērots arī sarežģītu dinamisku struktūru glabāšanai relāciju datu bāzēs vai failu kešatmiņā.

    Tā kā JSON ir JavaScript sintakses apakškopa, to var ātri deserializēt, izmantojot iebūvēto funkciju eval(). Turklāt ir iespējams ievietot pilnībā funkcionējošas JavaScript funkcijas. PHP, sākot ar versiju 5.2.0, JSON atbalsts ir iekļauts kodolā funkciju json_decode() un json_encode() veidā, kas pašas pārvērš JSON datu tipus par attiecīgajiem PHP tipiem un otrādi.

    Sintakse

    JSON pamatā ir divas struktūras:

    • Atslēgu/vērtību pāru kopa. Dažādās valodās tas tiek īstenots kā objekts, ieraksts , struktūra , vārdnīca , hash tabula , atslēgas saraksts vai asociatīvais masīvs . Atslēga var būt tikai virkne, vērtība var būt tikai jebkura forma.
    • Numurēta vērtību kopa. Daudzās valodās tas tiek īstenots kā masīvs, vektors, saraksts vai secība.

    Tās ir universālas datu struktūras. Teorētiski visas mūsdienu programmēšanas valodas tās atbalsta vienā vai otrā veidā. Tā kā JSON tiek izmantots datu apmaiņai starp dažādām programmēšanas valodām, ir lietderīgi to veidot uz šīm struktūrām.

    JSON tiek izmantotas šādas veidlapas:

    • Objekts ir nesakārtota nosaukumu/vērtību pāru kopa, kas ietverta krokainās iekavās ( ). Starp nosaukumu un vērtību ir simbols ": " , un nosaukuma/vērtības pāri ir atdalīti ar komatiem.
    • Masīvs (viendimensionāls) ir vērtību kopa, kurai ir sērijas numuri (indeksi). Masīvs ir ievietots kvadrātiekavās. Vērtības ir atdalītas ar komatiem.
    • Vērtība var būt līniju dubultpēdiņās, numuru, vērtība taisnība vai viltus, objektu, masīvs, vai vērtību null. Šīs struktūras var ievietot viena otrā.
    • Virkne ir sakārtota nulles vai vairāku Unikoda rakstzīmju kopa, kas ir ievietota dubultpēdiņās, izmantojot atpakaļvērstās slīpsvītras atsoļa secības. Rakstzīmes tiek attēlotas kā vienkārša virkne.
    • Nosaukums ir virkne.

    Līnijaļoti līdzīgs virknei valodās un Java. Numurs arī ļoti līdzīgs C vai Java skaitlim, izņemot to, ka tiek izmantots tikai decimālais formāts. Starp jebkurām divām rakstzīmēm var ievietot atstarpes.

    Nākamajā piemērā ir parādīts JSON attēlojums objektam, kas apraksta personu. Objektam ir stīga vārda un uzvārda lauki, objekts, kas apraksta adresi, un masīvs, kurā ir tālruņa numuru saraksts.

    ( "vārds" : "Ivans" , "uzvārds" : "Ivanovs" , "adrese" : ( "iela" : "Moskovskoe sh., 101, apt. 101" , "city" : "Ļeņingrad" , "pasta indekss": 101101 ) , "phoneNumbers" : [ "812 123-1234" , "916 123-4567" ])

    XML formātā šāda struktūra izskatītos apmēram šādi:

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

    812 123-1234 916 123-4567

    Salīdzinājums ar YAML

    Gan funkcionāli, gan sintaktiski JSON ir YAML valodas apakškopa. Konkrēti, YAML 1.2 specifikācijā ir teikts, ka "jebkurš JSON fails ir derīgs YAML fails". Visizplatītākais YAML parsētājs var apstrādāt arī JSON. YAML specifikācija pirms versijas 1.2 pilnībā neaptvēra JSON, galvenokārt tāpēc, ka YAML trūka vietējā atbalsta UTF-32, kā arī prasība atstāt atstarpi aiz komata atdalītāja. Turklāt JSON specifikācijā bija iekļauti /* */ stila komentāri.

    Vissvarīgākā YAML atšķirība ir sintakses paplašinājumu kopa, kurai nav analogu JSON:

    Relāciju: YAML atbalsta relāciju datus: YAML dokumentā varat atsaukties uz enkuru, kas failā/straumē radās agrāk. Rekursīvas struktūras var izteikt šādā veidā. Paplašināms: YAML atbalsta paplašināmus datu tipus, kas pārsniedz primitīvus (t.i., virknes, skaitļus, Būla vērtības). Bloki: YAML ir pieejama bloku sintakse ar atkāpi; tas ļauj aprakstīt strukturētus datus, neizmantojot nevajadzīgus simbolus (visādas iekavas, pēdiņas utt.).

    JSON shēma

    JSON shēma ir viena no valodām, lai aprakstītu JSON dokumenta struktūru. Izmanto JSON sintaksi. Pamatojoties uz XML shēmas, RelaxNG, Kwalify jēdzieniem. JSON shēma ir pašaprakstoša valoda: tos pašus serializācijas/deserializācijas rīkus var izmantot, lai apstrādātu datus un aprakstītu to derīgumu.

    JSON izmantošana Ajax

    Šis Javascript koda piemērs parāda, kā pārlūkprogramma var izmantot XMLHttpRequest, lai pieprasītu JSON formatētu objektu no servera (programmas servera puse ir izlaista; tajā ir jāietver kods, kas nosūta datus kā JSON virkni, atbildot uz pieprasījumu url).

    Var the_object; var http_pieprasījums = new XMLHttpRequest() ; http_request.open("GET", url, true); 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 ( brīdinājums bija problēma ar URL." ) ; ) http_request = null ; ) ) ;

    Ņemiet vērā, ka šis XMLHttpRequest izmantošanas piemērs nav universāls visām pārlūkprogrammām (pārlūkprogrammām, kuru pamatā ir Internet Explorer, Opera, Safari un Mozilla, kodā vajadzētu būt dažām atšķirībām). XMLHttpRequest izmantošana ir ierobežota vienas un tās pašas izcelsmes politikas dēļ: pieprasījuma atbildes URL ir jāatrodas tajā pašā DNS domēnā, kurā atrodas servera lapa, kurā atrodas atbilde. Alternatīva ir JSONP pieeja, kas ietver kodētas funkcijas izsaukuma izmantošanu starp klientu un serveri, lai klients varētu ielādēt JSON kodētus datus no trešās puses domēniem un paziņot zvanītājam par pabeigšanu, lai gan tas rada dažus drošības riskus un papildu servera prasības.

    Alternatīvi, lapas kods var izmantot elementus, lai asinhroni pieprasītu JSON datus, vai vienkārši . Šīs pieejas bija izplatītas pirms plaša XMLHttpRequest atbalsta.

    Varat arī izmantot to pašu izcelsmes politiku, lai pārsūtītu JSON datus, izmantojot dinamiskos tagus, taču tas rada ievainojamu kodu. Ir ieteikts izmantot to kā drošāku alternatīvu JSONRequest.

    Drošības jautājumi

    Lai gan JSON ir paredzēts datu pārsūtīšanai seriālā formā, tā sintakse atbilst JavaScript sintaksei, un tas rada vairākas drošības problēmas. Bieži vien, lai apstrādātu datus, kas saņemti no ārēja avota JSON formātā, tiem tiek piemērota funkcija eval() bez iepriekšējas validācijas.

    JavaScript eval()

    Tā kā JSON šķiet sintaktiski pareizs JavaScript koda fragments, vienkāršākais veids, kā parsēt JSON datus JavaScript programmā, ir izmantot iebūvēto JavaScript eval() funkciju, kas paredzēta JavaScript izteiksmju izpildei. Izmantojot šo pieeju, nav nepieciešams izmantot papildu parsētājus.

    Paņēmiens eval() padara sistēmu neaizsargātu, ja izmantoto JSON datu avots nav uzticams ( Angļu). Šādi dati var būt ļaunprātīgs JavaScript kods koda ievadīšanas uzbrukumiem ( Angļu). Izmantojot šo ievainojamību, ir iespējams nozagt datus un viltot autentifikāciju. Tomēr ievainojamību var novērst, izmantojot papildu datu validācijas rīkus. Piemēram, pirms eval() izpildes datus, kas saņemti no ārēja avota, var pārbaudīt, izmantojot regulārās izteiksmes. RFC, kas definē JSON, iesaka izmantot tālāk norādīto kodu, lai pārbaudītu, vai tas atbilst JSON formātam

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

    Kā drošāka eval() alternatīva ir ierosināta jauna funkcija parseJSON(), kas var apstrādāt tikai JSON datus. Tas tika ieviests ECMAScript standarta 4. versijā un ir aprakstīts rakstā "JSON: zema tauku satura alternatīva XML". Pašlaik tā ir pieejama kā JavaScript bibliotēka un tiks iekļauta ECMAScript piektajā izdevumā.

    Iegultais JSON

    Jaunākajās tīmekļa pārlūkprogrammu versijās ir iebūvēts JSON atbalsts, un tās spēj to apstrādāt, neizsaucot funkciju eval(), kas noved pie aprakstītās problēmas. Šajā gadījumā JSON apstrāde parasti ir ātrāka. Tātad 2009. gada jūnijā šādās pārlūkprogrammās bija iebūvēts JSON atbalsts:

    Vismaz piecas populāras JavaScript bibliotēkas izmanto iekļauto JSON, ja tās ir pieejamas:

    Starpdomēnu pieprasījuma viltošana

    Slikta JSON izmantošana padara vietnes neaizsargātas pret starpvietņu pieprasījumu viltošanu (CSRF vai XSRF). Tā kā tags ļauj izmantot avotu, kas nepieder pie tā paša domēna kā resurss, kas to izmanto, tas ļauj izpildīt kodu, aizsedzot JSON datus patvaļīgas lapas kontekstā, tādējādi ļaujot apdraudēt paroles vai cita sensitīva informācija par lietotājiem, kuri ir pilnvaroti izmantot citu vietni.

    Šķiet, ka tā ir problēma tikai tad, ja JSON datos ir ietverta sensitīva informācija, ko var apdraudēt trešā puse, un ja serveris paļaujas uz vienas izcelsmes politiku ( Angļu), bloķējot piekļuvi datiem, kad tiek atklāts ārējs pieprasījums. Tā nav problēma, ja serveris nosaka pieprasījuma derīgumu, sniedzot datus tikai tad, ja tie ir pareizi. Lai to noteiktu, nevar izmantot HTTP sīkfailus. Ekskluzīvu HTTP sīkfailu izmantošanu izmanto starpvietņu pieprasījuma viltošanai.

    JSONP un JSONPP

    JSONP (JSON aizpildījums) vai “JSON ar polsterējumu” ir JSON paplašinājums, ja kā ievades arguments ir norādīts atzvanīšanas funkcijas nosaukums.

    Tehnoloģija ir balstīta uz faktu, ka pārlūkprogrammas drošības politika ļauj izmantot tagu, lai piekļūtu serveriem, kas nav serveri, no kura lapa tika ielādēta.

    Neizmantojot JSONP tehnoloģiju (tas ir, izmantojot tikai JSON datu kodējumu), serveris var atgriezt tikai datus. Piemēram, šādi:

    ("papīrs": "A4", "skaits": 5)

    Tomēr tie ir tikai dati un nevar ietekmēt pārlūkprogrammu.

    Izmantojot JSONP paņēmienu, atzvanīšanas funkcijas nosaukums tiek nodots trešās puses serverim zvana līnijā (GET):

    Šeit jsonp parametrs satur atzvanīšanas funkcijas parseResponse nosaukumu.

    Tagad ārvalstu serveris example.com var atgriezt šādu kodu:

    ParseResponse(("papīrs": "A4", "skaits": 5))

    Kods tagad izsauc pirmā domēna JavaScript funkciju.

    Ideja sākotnēji tika ierosināta MacPython emuārā 2005. gadā, un šobrīd to izmanto daudzas Web 2.0 lietojumprogrammas, piemēram, Dojo Toolkit Applications, Google Toolkit Applications un zanox Web Services. Ir ierosināti papildu šī protokola paplašinājumi, lai iekļautu papildu argumentus, piemēram, JSONPP atbalstu S3DB tīmekļa pakalpojumiem.

    Tā kā JSONP izmanto skriptu tagus, zvani būtībā ir atvērti pasaulei. Šī iemesla dēļ JSONP var nebūt piemērots sensitīvu datu glabāšanai.

    Skriptu tagu iespējošana no attālām vietnēm ļauj tām pārsūtīt jebkuru vietnes saturu. Ja attālajā vietnē ir ievainojamības, kas ļauj ievadīt Javascript, tās var ietekmēt arī sākotnējo vietni.

    JSONPP (parametizēts JSON ar polsterējumu) Parameterized JSON ar polsterējumu — JSONP idejas izstrāde

    JSONPP ietver avota URL, funkcijas nosaukumu, kas apstrādās JSON datus, rindiņu eval pēc datu saņemšanas un rindiņu eval pēc datu apstrādes pabeigšanas:

    JSON_call(SRC, JSONP, JSONPP, ONLOAD) ;

    beidzot apgriežas

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

    Kopumā pašai JSONPP idejai parametru skaits nav svarīgs. SRC, JSONP, JSONPP (un to apstrādei servera pusē un pēc tam klienta pusē) ir pietiekami, lai tas būtu JSONPP.

    Apskatīsim piemēru darbam ar S3DB pakalpojumu.

    Funkcija s3db_jsonpp_call(src, next_eval) ( var call = "call_" + Math .random () .toString () .replace (/\./g, "" ) ; var headID = document.getElementsByTagName ("head") [ 0 ] ; var script = document.createElement ("skripts" ) ; script.id = call; script.type = "text/javascript" ; // izmantojot polsterētu, parametrizētu json src = src+ "&format=json&jsonp=s3db_jsonpp&jsonpp=" + next_eval+ "&onload=remove_element_by_id("" + script.id + "")" ; script.src = src; headID.appendChild (skripts) ; // izgūt atbildi ) funkcija s3db_jsonpp(ans, jsonpp) ( eval(jsonpp) ; return ans ; ) funkcija remove_element_by_id(id) ( var e = document.getElementById (id) ; e.parentNode .removeChild (e) ; return false ; )

    Piemērā funkcija s3db_jsonpp_call() izveido skripta elementu DOM galvenajā daļā, kura src atbilst JSONPP izsaukumam.

    Pēc atbildes saņemšanas no servera tiks izsaukts s3db_jsonpp() - tas tiek nodots izsaukuma parametros, kā tam vajadzētu būt pēc JSONP noteikumiem.

    Iekšpusē s3db_jsonpp() eval(jsonpp) aktivizēsies un atgriezīs vērtību ans.

    Izsaucot eval(onload), tiek izpildīts remove_element_by_id() ar izveidotā skripta ID galvā un galu galā tas tiek dzēsts, jo tas tik un tā netiks izmantots, jo piemērā norādītais ID tika ģenerēts nejauši pašā skripta sākumā. s3db_jsonpp_call() funkcija. Šis zvans ir servera atbildē.

    Objektu atsauces

    JSON standarts neatbalsta objektu atsauces, bet Dojo rīkkopa parāda, kā standarta JSON var atbalstīt šādas atsauces, izmantojot papildu konvencijas. Jo īpaši modulis dojox.json.ref nodrošina atbalstu vairāku veidu saitēm, tostarp apļveida, vairāku, starpdokumentu un slinkām saitēm.

    Skatīt arī Piezīmes
  • YAML nav iezīmēšanas valoda (YAML™) versija 1.2 (angļu valodā). - Darba projekts 2008-05-11 (nepieejama saite - stāsts) Ielādēts 2009. gada 24. septembrī.
  • . RedHanded (2005. gada 7. aprīlis). Skatīts 2012. gada 25. septembrī.
  • Json.Com JSON shēmas priekšlikums (nepieejama saite — stāsts)
  • RFC 4627
  • JSON: beztauku alternatīva XML. Arhivēts
  • json2.js (angļu valodā) . Arhivēts no oriģināla 2012. gada 12. februārī. Iegūts 2009. gada 24. septembrī.
  • Izmantojot iegulto JSON.
  • Iegults JSON IE8. Arhivēts no oriģināla, laiks: 2012. gada 12. februārī.
  • Opera Presto 2.5 (angļu valodā) atbalstītās tīmekļa specifikācijas (2010. gada 10. marts). Arhivēts no oriģināla 2012. gada 12. februārī. Iegūts 2010. gada 29. martā.
  • JSON objekta ES 3.1 ieviešana.
  • Biļete #4429lang=en . Arhivēts no oriģināla, laiks: 2012. gada 12. februārī.
  • Biļete #4429 (2009. gada 22. maijs). Arhivēts no oriģināla 2012. gada 12. februārī. Iegūts 2009. gada 3. jūlijā.
  • Biļete #8111lang=en . Arhivēts no oriģināla, laiks: 2012. gada 12. februārī.
  • MooTools Core & More 1.3.1. Arhivēts no oriģināla, laiks: 2012. gada 12. februārī.
  • YUI 2: JSON utilīta (2009. gada 1. septembris). Arhivēts no oriģināla 2012. gada 12. februārī. Iegūts 2009. gada 22. oktobrī.
  • Uzziniet JSON (2010. gada 7. aprīlis). Arhivēts no oriģināla 2012. gada 12. februārī. Iegūts 2010. gada 7. aprīlī.
  • Džeremijs Grosmens Uzlabotas uzbrukuma metodes tīmekļa lietojumprogrammām, kas izmanto Gmail. WhiteHat drošība. Arhivēts no oriģināla 2012. gada 12. februārī. Iegūts 2009. gada 23. septembrī.
  • no __future__ importa * » Remote JSON - JSONP . Bob.pythonmac.org. Arhivēts no oriģināla 2012. gada 12. februārī. Iegūts 2008. gada 8. septembrī.
  • Almeida, Jonass (2008. gada 11. jūnijs). "JSON, JSONP, JSONPP? "(S3DB). Iegūts 2009-04-26.
  • RIAspot JSON P Cross Site XHR .(nepieejama saite - stāsts)
  • JSON atsauces pakalpojumā Dojo. Arhivēts no oriģināla, laiks: 2012. gada 12. februārī.
  • Saites
    • Oficiālā formāta mājas lapa krievu valodā
    • json.js, json2.js ir Duglasa Krokforda izstrādāta bibliotēka darbam ar JSON datiem JavaScript. Paplašina objektu ar metodi toJSONString, kas pēc tam atrodas jebkurā objektā, un pārvērš to par JSON formāta virkni.
    • json-rpc.org (angļu valodā)
    Dokumentu iezīmēšanas valodasBiroja dokumenti

    Nodarbība, kurā tiek pētīts, kas ir JSON un kādas ir tā priekšrocības salīdzinājumā ar citiem datu formātiem.

    JSON koncepcija

    JSON (JavaScript Object Notation) ir teksta formāts datu attēlošanai JavaScript objektu apzīmējumā.

    Tas nozīmē, ka JSON dati ir sakārtoti tāpat kā JavaScript objektā. Bet atšķirībā no pēdējā, JSON ierakstīšanas formātam ir dažas funkcijas, kas tiks apspriestas nedaudz vēlāk.

    JSON parasti tiek izmantots kopā ar AJAX, lai serveris varētu ērtā veidā pārsūtīt datus uz JavaScript skriptu, kas pēc tam tos parādīs lapā.

    JSON formāta struktūra

    Ikviens, kurš pārzina objektu izveides procesu JavaScript, neredzēs neko jaunu JSON formāta struktūrā. Tas ir tāpēc, ka JSON struktūra atbilst JavaScript objekta struktūrai ar dažiem ierobežojumiem.

    JSON ir vieglāk uzskatīt par konteineru, kas sastāv no elementiem. Katrs elements šādā konteinerā ir noteikta struktūrvienība, kas sastāv no atslēgas un vērtības.

    Šajā gadījumā vērtība ir tieši saistīta ar atslēgu un veido tā saukto atslēgas vērtību pāri. Lai iegūtu vērtību šādā objektā, jums jāzina tā atslēga. Sintaktiski šādi dati tiek rakstīti JSON šādi:

    Iepriekš minētajā ierakstā varat redzēt, ka atslēga ir atdalīta no vērtības, izmantojot kolu (:). Šajā gadījumā JSON objekta atslēga ir jāiekļauj dubultpēdiņās. Šī ir pirmā JSON funkcija, kas to atšķir no JavaScript objekta. Jo JavaScript objektā atslēga (objekta rekvizīts) nav jāiekļauj dubultpēdiņās.

    Piemēram, objekta struktūra, kas ir derīga no JavaScript viedokļa, bet nav derīga no JSON viedokļa:

    Var persona = ( vārds: "Ivans"; ) // JavaScript objekts

    Brīdinājums: mēģiniet nosaukt atslēgu tā, lai nesarežģītu piekļuvi datiem, t.i. Veidojot nosaukumu, vēlams ievērot kamieļu apzīmējumus vai vārdu savienošanai izmantot pasvītrojumu ("_").

    JSON atslēgas vērtību var rakstīt vienā no šiem formātiem: virkne, skaitlis, objekts, masīvs, Būla vērtība (būla vērtība patiesa vai nepatiesa), null (īpaša JavaScript vērtība).

    Šis ir otrais JSON ierobežojums, jo JavaScript objekts var saturēt jebkuru datu tipu, tostarp funkciju.

    Var person = ( "nosaukums" : "Ivans"; "setName": function() ( console.log(this.name); ) ) // JavaScript objekts

    Lai atdalītu vienu elementu (atslēgas vērtību pāri) no cita, izmantojiet komatu (,) rakstzīmi.

    Piemēram, apsveriet JSON, kas sastāv no dažādiem datu veidiem.

    Uzmanību: JSON datu formāts neļauj pievienot komentārus tā struktūrā.

    Darbs ar JSON JavaScript

    Atšķirībā no JavaScript objekta, JSON ir virkne.

    Piemēram:

    // piemēram, mainīgais personData satur virkni, kas ir JSON var personData = "("name":"Ivan","age":37,"mother":("name":"Olga","vecums": 58),"bērni":["Maša","Igors","Taņa"],"precējies": patiess,"suns": null)";

    Darbs ar JSON parasti tiek veikts divos virzienos:

  • Parsēšana ir JSON saturošas virknes pārtulkošana JavaScript objektā.
  • Pārveidojiet JavaScript objektu par JSON virkni. Citiem vārdiem sakot, šī darbība ir pretēja parsēšanai.
  • JSON parsēšana

    JSON parsēšana, t.i. JSON virknes tulkošana JavaScript objektā tiek veikta, izmantojot eval() vai parse() metodi.

    Izmantojot eval() metodi:

    // personas mainīgais ir JavaScript objekts, kas tiek iegūts, izpildot JSON kodu (virkni) var person= eval("("+personData+")");

    Izmantojot metodi JSON.parse():

    // personas mainīgais ir JavaScript objekts, kas iegūts, parsējot JSON virkni var person = JSON.parse(personData);

    JavaScript objekta pārveidošana par JSON virkni

    JavaScript objekta tulkošana JSON virknē tiek veikta, izmantojot metodi JSON.stringify(). Šī metode darbojas pretēji JSON.parse() metodei.

    Var personString = JSON.strigify(persona);

    JSON formāta priekšrocības

    JSON datu formātam ir šādas priekšrocības:

    • ērtas un ātri lietojamas metodes, kas paredzētas JSON virknes konvertēšanai (parsēšanai) par JavaScript objektu un atpakaļ;
    • skaidra un vienkārša datu struktūra;
    • ļoti mazs izmērs salīdzinājumā ar citiem datu formātiem (piemēram, XML). Tas ir tāpēc, ka JSON formātā ir minimālais iespējamais formatējums, t.i. Rakstot to, tiek izmantotas tikai dažas speciālās rakstzīmes. Tā ir ļoti svarīga priekšrocība, jo... JSON formātā iesniegtie dati tiks ielādēti ātrāk nekā tad, ja tie tiktu parādīti citos formātos.

    Sakarā ar to, ka šim formātam ir tik daudz priekšrocību, tas ir kļuvis izmantots ne tikai JavaScript, bet arī daudzās citās valodās, piemēram, C, Ruby, Perl, Python, PHP utt.

    JSON un XML formātu salīdzinājums

    JSON formātam salīdzinājumā ar XML formātu ir šādas priekšrocības:

  • Dažiem datu pārsūtīšanas gadījumiem JSON izmērs būs ievērojami mazāks par XML lielumu.
  • JSON ir labākas pārveidošanas metodes uz JavaScript datu struktūrām nekā XML.
  • JSON ir vieglāk izveidot nekā XML.
  • Darbs ar JSON datiem pēc parsēšanas tiek veikts kā JavaScript objekts.

    //JSON var personData = "("vārds":"Ivans","vecums":37,"māte":("vārds":"Olga","vecums":58),,"bērni":["Maša" ""Igors","Tanya"],"precējies": patiess,"suns": null)"; //JavaScript objekts persona var persona = JSON.parse(personData);

    Apskatīsim galvenos punktus:

    //iegūstiet atslēgas (īpašuma) vārda person.name vērtības; persona ["vārds"]; //iegūstiet atslēgas (īpašuma) nosaukuma vērtības, kas atrodas objektā mātes persona.mātes.nosaukums; //izdzēst vecuma elementu delete(person.age) //pievienot (vai atjaunināt) atslēgu (īpašums) person.eye = "brūns"; //strādājot ar masīviem, jāizmanto metodes, kas paredzētas darbam īpaši ar masīviem //noņemt 1 elementu no masīva (savienojuma metode) person.children.splice(1,1) //pievienot elementu masīvam (push metode ) persona.bērni. push("Katja");

    Lai atkārtotu objekta elementus, varat izmantot for..in cilpu:

    For (key in person) ( if (person.hasOwnProperty(key)) ( //key = atslēga //value = person console.log("Key = " + key); console.log("Vērtība = " + persona) ; ) // ja personas objektam ir atslēga (ja personai ir atslēgas rekvizīts) ) // atkārtojiet visas objekta atslēgas (īpašības)

    Lai atkārtotu masīva elementus, varat izmantot šādu cilpu:

    For (var i=0; i

    Visbiežāk sastopamā problēma, kas lietotājiem neļauj atvērt šo failu, ir nepareizi piešķirta programma. Lai to labotu operētājsistēmā Windows OS, konteksta izvēlnē ar peles labo pogu noklikšķiniet uz faila, virziet kursoru virs vienuma “Atvērt ar” un nolaižamajā izvēlnē atlasiet “Atlasīt programmu...”. Rezultātā jūs redzēsiet datorā instalēto programmu sarakstu un varēsiet izvēlēties atbilstošo. Ieteicams arī atzīmēt izvēles rūtiņu blakus “Izmantot šo lietojumprogrammu visiem JSON failiem”.

    Vēl viena problēma, ar kuru arī mūsu lietotāji saskaras diezgan bieži, ir tas, ka JSON fails ir bojāts. Šāda situācija var rasties daudzos gadījumos. Piemēram: fails tika lejupielādēts nepilnīgi servera kļūdas dēļ, fails sākotnēji tika bojāts utt. Lai atrisinātu šo problēmu, izmantojiet kādu no ieteikumiem:

    • Mēģiniet atrast vajadzīgo failu citā avotā internetā. Iespējams, jums veiksies atrast piemērotāku versiju. Google meklēšanas piemērs: "Faila faila tips:JSON" . Vienkārši aizstājiet vārdu "fails" ar vajadzīgo nosaukumu;
    • Lūdziet viņiem vēlreiz nosūtīt jums oriģinālo failu, iespējams, tas ir bojāts pārsūtīšanas laikā;