JSON formāts: piemērs un apraksts. JSON formāts: datu izveide, izmantošana ar PHP un JS Json saīsinājuma dekodēšanu

), 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 virkne 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 piedāvā atkāpes bloku sintaksi; 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

    JSON jeb JavaScript objektu apzīmējums ir formāts, kas ievieš strukturētu datu nestrukturētu teksta attēlojumu, pamatojoties uz atslēgu-vērtību pāru un sakārtotu sarakstu principu. Lai gan JSON izcelsme ir JavaScript, tas tiek atbalstīts lielākajā daļā valodu, vai nu vietējā valodā, vai ar īpašu bibliotēku palīdzību. Parasti Json tiek izmantots, lai apmainītos ar informāciju starp tīmekļa klientiem un tīmekļa serveri.

    Pēdējo 15 gadu laikā JSON ir kļuvis par formālu datu apmaiņas standartu un tiek izmantots praktiski visur internetā. Mūsdienās to izmanto gandrīz visi tīmekļa serveri. Vēl viens šīs popularitātes iemesls bija fakts, ka daudzas datu bāzes atbalstīja JSON. Mūsdienu relāciju datu bāzes, piemēram, PostgreSQL un MySQL, tagad atbalsta datu glabāšanu un eksportēšanu JSON. Tādas datu bāzes kā MongoDB un Neo4j atbalsta arī JSON, lai gan MongoDB izmanto nedaudz modificētu JSON versiju. Šajā rakstā mēs apskatīsim, kas ir JSON, tā priekšrocības salīdzinājumā ar XML, trūkumiem un to, kad to vislabāk izmantot.

    Lai saprastu, kāpēc ir nepieciešams JSON formāts un kā tas darbojas, ir nepieciešama prakse. Vispirms apskatīsim šo piemēru:

    {
    "firstName": "Džonatans",
    "uzvārds": "Freeman",
    “loginCount”: 4,
    "isWriter": taisnība,
    “worksWith”: [“Spantree Technology Group”, “InfoWorld”],
    “mājdzīvnieki”: [
    {
    “vārds”: “Lilija”,
    “tips”: “jenots”
    }
    ]
    }

    Šajā sistēmā mēs esam skaidri definējuši dažas personas īpašības. Vispirms mēs noteicām vārdu, uzvārdu, pieteikšanos skaitu sistēmā, vai šī persona ir rakstnieks, uzņēmumu sarakstu, ar kuriem viņš strādā, un mājdzīvnieku sarakstu. Šo vai līdzīgu struktūru no servera var pārsūtīt uz tīmekļa pārlūkprogrammu vai mobilo aplikāciju, kas pēc tam ar šiem datiem var darīt visu, kas tai nepieciešams, piemēram, parādīt vai saglabāt.

    JSON ir vispārīgs datu formāts ar minimālu vērtību tipu skaitu — virknes, skaitļi, Būla vērtības (viens vai nulle), saraksti, objekti un nulles. Lai gan JSON ir JavaScript apakškopa, lielākajā daļā populārāko programmēšanas valodu ir šāda veida dati, padarot JSON par labu kandidātu datu nodošanai starp programmām, kas rakstītas dažādās valodās.

    Kāpēc jums vajadzētu izmantot JSON?

    Lai saprastu JSON lietderību un nozīmi, mums ir nedaudz jāsaprot interaktivitātes vēsture internetā. 2000. gadu sākumā tīmekļa vietņu interaktivitāte sāka mainīties. Tajā laikā pārlūkprogramma kalpoja tikai informācijas parādīšanai, un tīmekļa serveris veica visu darbu, sagatavojot saturu parādīšanai. Kad lietotājs pārlūkprogrammā noklikšķināja uz pogas, serverim tika nosūtīts pieprasījums, kurā tika apkopota un nosūtīta HTML lapa, kas ir gatava parādīšanai. Šis mehānisms bija lēns un neefektīvs. Tas prasīja pārlūkprogrammai atkārtoti atveidot visu lapā, pat ja mainījās neliela datu daļa.

    Tolaik par pārskaitījumiem tika iekasēta maksa, pamatojoties uz pārsūtīto datu apjomu, tāpēc izstrādātāji saprata, ka visas lapas pārlādēšana ir ļoti dārga, un apsvēra jaunas tehnoloģijas lietotāja interfeisa uzlabošanai. Tad iespēja veikt tīmekļa pieprasījumus fonā, kas tika pievienota pārlūkprogrammā Internet Explorer 5, izrādījās diezgan dzīvotspējīga pieeja datu pakāpeniskai ielādei displejam. Tā vietā, lai atkārtoti ielādētu lapu, noklikšķinot uz pogas, tiks izveidots tīmekļa pieprasījums, kas darbosies fonā. Saturs tiks atjaunināts, tiklīdz tas tiks ielādēts. To var kontrolēt, izmantojot JavaScript, universālu programmēšanas valodu pārlūkprogrammām.

    Sākotnēji dati tika pārsūtīti XML formātā, taču tos bija grūti izmantot JavaScript. JavaScript jau bija objekti, kas tika izmantoti datu attēlošanai valodā, tāpēc Duglass Krokfords izmantoja JS objekta sintaksi un izmantoja to kā specifikāciju jaunam datu apmaiņas formātam, ko sauc par JSON. Šo formātu bija daudz vieglāk lasīt un parsēt JavaScript pārlūkprogrammā. Drīz izstrādātāji XML vietā sāka izmantot JSON.

    Mūsdienās ātra JSON datu apmaiņa ir de facto standarts datu pārsūtīšanai starp serveri un klientu, mobilajām lietojumprogrammām un pat iekšējiem sistēmas pakalpojumiem.

    JSON vs XML

    Kā jau teicu iepriekš, galvenā JSON alternatīva bija un ir XML. Tomēr XML jaunās sistēmās kļūst arvien mazāk izplatīta. Un ir ļoti viegli saprast, kāpēc. Tālāk ir sniegts piemērs iepriekš redzēto datu rakstīšanai Json, izmantojot XML:


    Džonatans
    Frīmens
    4
    taisnība

    Spantree tehnoloģiju grupa
    InfoWorld

    Lilija
    Jenots


    Papildus koda dublēšanai, kas būtībā aizņēma divreiz vairāk vietas datu rakstīšanai, XML arī rada zināmu neskaidrību, analizējot datu struktūru. XML konvertēšana par JavaScript objektu var aizņemt desmitiem līdz simtiem koda rindiņu, un katram parsējamam objektam ir nepieciešama precīza regulēšana. JSON konvertēšana par JavaScript objektu tiek veikta vienā rindā, un tai nav nepieciešamas nekādas priekšzināšanas par parsējamo objektu.

    JSON ierobežojumi

    Lai gan JSON ir salīdzinoši saspiests un elastīgs datu formāts, ar kuru ir viegli strādāt daudzās programmēšanas valodās, tam ir daži trūkumi. Šeit ir daži ierobežojumi:

    • Nav struktūras. No vienas puses, tas nozīmē, ka jums ir pilnīga elastība, lai sniegtu datus jebkurā vēlamajā veidā. No otras puses, jūs varat viegli uzglabāt nestrukturētus datus.
    • Tikai viena veida numuri. Tiek atbalstīts IEEE-754 peldošā komata un dubultās precizitātes formāts. Tas ir diezgan daudz, taču jūs nevarat izmantot dažādus ciparu veidus, kas ir citās valodās.
    • Nav datuma veida. izstrādātājiem ir jāizmanto datumu virkņu attēlojumi, kas var izraisīt formatējuma nekonsekvenci. Vai arī izmantojiet kā datumu milisekundes, kas pagājušas kopš Unix laikmeta sākuma (1970. gada 1. janvāris).
    • Bez komentāriem — jūs nevarēsiet komentēt laukus, kuriem tie ir nepieciešami, tieši kodā.
    • Plašs — lai gan JSON ir mazāk detalizēts nekā XML, tas nav kodolīgākais datu apmaiņas formāts. Augstākās klases vai specializētiem pakalpojumiem ieteicams izmantot efektīvākus formātus.
    Kad jums vajadzētu izmantot JSON?

    Ja izstrādājat programmatūru, kas mijiedarbojas ar pārlūkprogrammu vai vietējo mobilo lietojumprogrammu, labāk ir izmantot JSON. XML izmantošana ir novecojusi. Saziņai starp serveriem JSON var nebūt ļoti efektīva, un labāk ir izmantot serializācijas sistēmu, kas ir līdzīga Apache Avro vai Apache Thrift. Pat šeit JSON nav slikta izvēle un var sniegt visu nepieciešamo. Bet nav precīzas atbildes, ko izvēlēties.

    Ja izmantojat MySQL datu bāzes, jūsu programma būs ļoti atkarīga no datubāzē veiktā darbības. Relāciju datu bāzēs, kas atbalsta JSON, tiek uzskatīts par labu praksi izmantot pēc iespējas mazāk tā. Relāciju datu bāzes tika izstrādātas datiem ar noteiktu shēmu. Lai gan lielākā daļa no tiem tagad atbalsta JSON datu formātu, darba ar to veiktspēja būs ievērojami zemāka.

    secinājumus

    JSON ir datu formāts, kas galvenokārt paredzēts datu sūtīšanai starp tīmekļa serveriem un pārlūkprogrammām vai mobilajām lietojumprogrammām. Formātam ir vienkāršs dizains un elastība, tas ir viegli lasāms un saprotams, un ar šādiem datiem ir viegli strādāt lielākajā daļā programmēšanas valodu. Stingras shēmas trūkums pieļauj formāta elastību, taču šī elastība dažkārt var apgrūtināt datu lasīšanu un izpratni.

    Jums var būt grūti strādāt ar JSON tādās spēcīgi ievadītās valodās kā Scala vai Elm, taču formāta plašā ieviešana nozīmē, ka ir utilītas un bibliotēkas, kas palīdz atrisināt pat sarežģītas problēmas. Tagad jūs zināt, kas ir json un kā to izmantot.

    Kas ir JSON un ko tas var darīt? Šajā rakstā jūs uzzināsit, kā izmantot JSON, lai ērti strādātu ar datiem. Mēs arī apskatīsim, kā strādāt ar JSON, izmantojot PHP un JavaScript.

    Ja esat izstrādājis vietnes vai tīmekļa lietojumprogrammas kopumā, iespējams, vismaz garāmejot esat dzirdējis par JSON. Bet ko īsti nozīmē JSON? Ko var darīt šis datu formāts un kā to var izmantot?

    Šajā rakstā mēs uzzināsim pamatus darbam ar json formātu. Mēs sekosim šādām tēmām:

    • Kas ir JSON formāts?
    • Kā izveidot JSON virknes?
    • Vienkāršs JSON datu piemērs
    • JSON salīdzināšana ar XML

    Sāksim!

    Kas ir JSON formāts?

    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 gan vienkāršus skaitļus un virknes, gan masīvus un objektus, izmantojot tikai tekstu. Varat arī saistīt objektus un masīvus, kas ļauj izveidot sarežģītas datu struktūras.

    Kad JSON virkne ir izveidota, to var viegli nosūtīt uz jebkuru lietojumprogrammu vai datoru, jo tas ir tikai teksts.

    JSON ir daudz priekšrocību:

    • Tas ir kompakts
    • Tas ir cilvēkiem lasāms un viegli lasāms ar datoru
    • To var viegli pārvērst programmatūras formātos: skaitliskās vērtībās, virknēs, Būla formātā, nulles vērtībā, masīvos un asociatīvajos masīvos.
    • Gandrīz visās programmēšanas valodās ir funkcijas, kas ļauj lasīt un izveidot json datu formātu.

    Burtiski saīsinājums JSON apzīmē JavaScript objektu apzīmējumu. Kā aprakstīts iepriekš, šis formāts ir balstīts uz objektu izveidi, kas ir kaut kas līdzīgs asociatīvajiem masīviem citās programmēšanas valodās.

    Kādiem nolūkiem tiek izmantots JSON?

    Galvenokārt json tiek izmantots datu apmaiņai starp JavaScript un servera pusi (php). Citiem vārdiem sakot, ajax tehnoloģijai. Tas ir ļoti ērti, ja nododat vairākus mainīgos lielumus vai veselus datu masīvus.

    Lūk, kā tas izskatās piemērā:

  • Lietotājs noklikšķina uz sīktēla
  • JavaScript apstrādā šo notikumu un nosūta ajax pieprasījumu PHP skriptam, nododot attēla ID.
  • Serverī php no datu bāzes saņem bildes aprakstu, bildes nosaukumu, adresi lielajam attēlam un citu informāciju. Pēc tā saņemšanas tas pārvērš to JSON formātā un nosūta atpakaļ uz lietotāja lapu.
  • JavaScript saņem atbildi JSON formātā, apstrādā datus, ģenerē html kodu un parāda palielinātu attēlu ar aprakstu un citu informāciju.
  • Tādā veidā attēls tiek palielināts, nepārlādējot lapu pārlūkprogrammā. Tas ir ļoti ērti, ja nepieciešams saņemt daļējus datus vai pārsūtīt uz serveri nelielu informācijas apjomu.

    Ikviena iecienītākajam jQuery ir getJSON() un parseJSON() funkcijas, kas palīdz strādāt ar formātu, izmantojot ajax pieprasījumus.

    Kā izveidot JSON virknes?


    Tālāk ir sniegti pamatnoteikumi JSON virkņu izveidei.

    • JSON virknē ir gan vērtību masīvs, gan objekts (asociatīvais masīvs ar nosaukuma/vērtības pāriem).
    • Masīvs jāiekļauj kvadrātiekavās [ un ], un tajā var būt vērtību saraksts, kas ir atdalītas ar komatu.
    • Objekti tiek apvilkti, izmantojot cirtainas rokas ( un ), un tajos ir arī ar komatu atdalīti vārdu/vērtību pāri.
    • Vārda/vērtības pāri sastāv no lauka nosaukuma (dubultpēdiņās), kam seko kols (:), kam seko lauka vērtība.
    • Vērtības masīvā vai objektā var būt:
      • Skaitlis (vesels skaitlis vai punktēta daļa)
      • Virknes (ievilktas dubultpēdiņās)
      • Būla (patiesa vai nepatiesa)
      • Citi masīvi (iesaiņoti kvadrātiekavās [ un ])
      • Citi objekti (iesaiņoti cirtainās rokās ( un ))
      • Nulle vērtība

    Svarīgs! Ja vērtībās izmantojat dubultpēdiņas, atkāpieties no tām, izmantojot atpakaļvērstās slīpsvītras simbolu: \". Varat arī izmantot heksadecimālās rakstzīmes, tāpat kā citās programmēšanas valodās.

    Vienkāršs JSON datu piemērs

    Šis piemērs parāda, kā varat saglabāt datus tiešsaistes veikala “grozā”, izmantojot JSON formātu:

    ("orderID": 12345, "shopperName": "John Smith", "shopperEmail": " [aizsargāts ar e-pastu]", "contents": [ ( "productID": 34, "productName": "SuperWidget", "quantity": 1 ), ( "productID": 56, "productName": "WonderWidget", "quantity": 3 ) ], "pasūtījumsPabeigts": patiess )

    Sadalīsim šos datus pa daļām:

  • Sākumā un beigās mēs izmantojam cirtainas rokas ( un ), lai skaidri norādītu, ka tas ir objekts.
  • Objekta iekšpusē mums ir vairāki vārdu/vērtību pāri:
  • "orderID": 12345 — lauks ar nosaukumu orderId un vērtība 12345
  • "shopperName": "John Smith" — lauks ar nosaukumu shopperName un vērtība Jānis Smits
  • "shopperEmail": "johnsmith@ example.com" - līdzīgi kā iepriekšējā laukā, šeit tiek saglabāts pircēja e-pasts.
  • "saturs": [ ... ] - lauks ar nosaukumu saturs, kura vērtība ir masīvs.
  • "orderCompleted": true — lauks orderCompleted, kura vērtība ir patiesa
  • Satura masīvā mums ir divi objekti, kas parāda groza saturu. Katram produkta objektam ir trīs rekvizīti: produkta ID, produkta nosaukums, daudzums.
  • Visbeidzot, tā kā JSON ir identisks JavaScript objektiem, varat viegli izmantot šo piemēru un izveidot no tā JavaScript objektu:

    var cart = ("orderID": 12345, "shopperName": "John Smith", "shopperEmail": " [aizsargāts ar e-pastu]", "contents": [ ( "productID": 34, "productName": "SuperWidget", "quantity": 1 ), ( "productID": 56, "productName": "WonderWidget", "quantity": 3 ) ], "orderCompleted": true );

    JSON salīdzināšana ar XML

    Vairumā gadījumu jūs domājat par JSON kā alternatīvu XML — vismaz tīmekļa lietojumprogrammās. Ajax koncepcija sākotnēji izmanto XML datu apmaiņai starp serveri un pārlūkprogrammu, taču pēdējos gados JSON ir kļuvis populārāks ajax datu pārsūtīšanai.

    Lai gan XML ir pārbaudīta un pārbaudīta tehnoloģija, ko izmanto daudzas lietojumprogrammas, JSON formāta priekšrocības ir tādas, ka tas ir kompaktāks un vieglāk rakstāms un lasāms.

    Šeit ir iepriekš minētais JSON piemērs, kas pārrakstīts tikai XML formātā:

    pasūtījuma ID 12345 pircējsVārds Džons Smits pircējsE-pasts [aizsargāts ar e-pastu] saturs productID 34 productName SuperWidget daudzums 1 productID 56 productName WonderWidget daudzums 3 pasūtījumsCompleted true

    Kā redzat, tas ir vairākas reizes garāks nekā JSON. Faktiski šajā piemērā ir 1128 rakstzīmes, savukārt JSON versijā ir tikai 323 rakstzīmes. XML versiju ir arī grūtāk lasīt.

    Protams, nevar spriest tikai pēc viena piemēra, taču pat neliels informācijas apjoms aizņem mazāk vietas JSON formātā nekā XML formātā.

    Kā strādāt ar JSON, izmantojot PHP un JS?

    Tagad mēs nonākam pie interesantākās daļas - JSON formāta praktiskās puses. Vispirms veltīsim cieņu JavaScript, pēc tam redzēsim, kā jūs varat manipulēt ar JSON, izmantojot PHP.

    JSON formāta izveide un lasīšana, izmantojot JavaScript


    Lai gan JSON formāts ir vienkāršs, izstrādājot tīmekļa lietojumprogrammas, ir grūti rakstīt manuāli. Turklāt jums bieži ir jāpārvērš JSON virknes mainīgajos un pēc tam jāizmanto savā kodā.

    Par laimi, daudzas programmēšanas valodas nodrošina rīkus darbam ar JSON virknēm. Kuras galvenā ideja:

    Lai izveidotu JSON virknes, sāciet ar mainīgajiem, kas satur dažas vērtības, un pēc tam nosūtiet tos caur funkciju, kas datus pārvērš JSON virknē.

    Lasot JSON virknes, jūs sākat ar JSON virkni, kurā ir noteikti dati, un nododat virkni caur funkciju, kas izveido mainīgos, kas satur datus.

    Apskatīsim, kā tas tiek darīts JavaScript.

    JSON virknes izveide no JavaScript mainīgā

    JavaScript ir iebūvēta metode JSON.stringify(), kas izmanto javascript mainīgo un atgriež JSON virkni, kas atspoguļo mainīgā saturu. Piemēram, izmantosim iepriekš izveidotu objektu un pārveidosim to par JSON virkni.

    var cart = ("orderID": 12345, "shopperName": "John Smith", "shopperEmail": " [aizsargāts ar e-pastu]", "contents": [ ( "productID": 34, "productName": "SuperWidget", "quantity": 1 ), ( "productID": 56, "productName": "WonderWidget", "quantity": 3 ) ], "orderCompleted": true ); brīdinājums (JSON.stringify(grozs));

    Lūk, kas parādīsies ekrānā:

    ("orderID":12345,"shopperName":"Džons Smits","shopperEmail":" [aizsargāts ar e-pastu]", "contents":[("productID":34,"productName":"SuperWidget","quantity":1), ("productID":56,"productName":"WonderWidget","quantity":3) ], "orderCompleted":true)

    Ņemiet vērā, ka JSON.stringify() izvada JSON virknes bez atstarpēm. To ir grūti nolasīt, taču tas ir kompaktāks, kas ir svarīgi, sūtot datus.

    JavaScript mainīgā izveide no JSON virknes

    Ir vairāki veidi, kā parsēt JSON virknes, vispieņemamākais un drošākais ir izmantot JSON.parse() metodi. Tas aizņem JSON virkni un atgriež JavaScript objektu vai masīvu, kurā ir JSON dati. Šeit ir piemērs:

    var jsonString = " \ ( \ "pasūtījuma ID": 12345, \ "shopperName": "John Smith", \ "shopperEmail": " [aizsargāts ar e-pastu]", \ "saturs": [ \ ( \ "productID": 34, \ "productName": "SuperWidget", \ "quantity": 1 \), \ ( \ "productID": 56, \ "productName": " WonderWidget", \"quantity": 3\ ) \ ], \"orderCompleted": true \ ) \"; var grozs = JSON.parse(jsonString); brīdinājums(grozs.pircējsE-pasts); brīdinājums(grozs.contents.productName);

    Šeit mēs izveidojām mainīgo jsonString, kas satur JSON virkni no iepriekš sniegtajiem piemēriem. Pēc tam mēs nosūtījām šo virkni caur JSON.parse(), lai izveidotu objektu, kas satur JSON datus, kas tika saglabāti groza mainīgajā. Visbeidzot, mēs pārbaudām datu pieejamību un parāda informāciju, izmantojot brīdinājuma modālo logu.

    Tiks parādīta šāda informācija:

    Reālā tīmekļa lietojumprogrammā jūsu JavaScript kodam jāsaņem JSON virkne kā atbilde no servera (pēc AJAX pieprasījuma nosūtīšanas), pēc tam parsējiet virkni un lietotājam parāda groza saturu.

    JSON formāta izveide un lasīšana, izmantojot PHP

    PHP, tāpat kā JavaScript, ir funkcijas, kas ļauj pārvērst mainīgos JSON formātā un otrādi. Apskatīsim tos.

    JSON virknes izveide no PHP mainīgā

    Json_encode() ņem PHP mainīgo un atgriež JSON virkni, kas atspoguļo mainīgā datus. Šeit ir mūsu PHP rakstīta “groza” piemērs:

    Šis kods rada tieši tādu pašu rezultātu kā JavaScript piemērs — derīga JSON virkne, kas atspoguļo mainīgo saturu:

    ("orderID":12345,"shopperName":"Džons Smits","shopperEmail":" [aizsargāts ar e-pastu]""contents":[("productID":34,"productName":"SuperWidget","quantity":1),("productID":56,"productName":"WonderWidget","quantity":3) ]"orderCompleted":true)

    Patiesībā jūsu PHP skriptam ir jānosūta JSON virkne kā atbilde uz AJAX pieprasījumu, kur JavaScript izmantos JSON.parse(), lai pārvērstu virkni mainīgajos.

    Funkcijā json_encode() varat norādīt papildu parametrus, kas ļauj konvertēt dažas rakstzīmes par hex.

    PHP mainīgā izveide no JSON virknes

    Līdzīgi kā iepriekš, ir funkcija json_decode(), kas ļauj atšifrēt JSON virknes un ievietot saturu mainīgajos.

    Tāpat kā JavaScript gadījumā, šis kods izvadīs sekojošo:

    [aizsargāts ar e-pastu] WonderWidget

    Pēc noklusējuma json_decode() atgriež JSON objektus kā PHP objektus. Līdzīgi kā parastajā sintakse, mēs izmantojam ->, lai piekļūtu objekta īpašībām.

    Ja vēlāk vēlaties izmantot datus kā asociatīvu masīvu, vienkārši nododiet funkcijai json_decode() otro parametru. Šeit ir piemērs:

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

    Tas rada tādu pašu rezultātu:

    [aizsargāts ar e-pastu] WonderWidget

    Varat arī nodot papildu argumentus funkcijai json_decode(), lai noteiktu lielu skaitļu apstrādi un rekursiju.

    Noslēgumā par JSON formātu

    Ja plānojat izveidot tīmekļa lietojumprogrammu, izmantojot Ajax tehnoloģiju, datu apmaiņai starp serveri un pārlūkprogrammu noteikti izmantosit JSON formātu.


    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 retā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 virkne satur vērtību masīvu vai objektu (nosaukuma/vērtību pāru asociatīvo masīvu).
    • 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ā.