Format de transfer de date PHP și JSON. JSON: Bazele utilizării Trimiterea json

01.07.2020 Lucrul cu imagini

Din acest subiect veți învăța cum să trimiteți funcții JavaScript prin JSON folosind PHP (conceptul în sine poate fi aplicat și în alte limbi).

PHP începând cu versiunea 5.2.0 include funcțiile json_encode() și json_decode(). Aceste funcții codifică datele în JSON și decodifică JSON în matrice asociative. Funcția nu poate fi codificată în json_encode(). În unele cazuri, acest lucru este al naibii de incomod.

  • S-a adăugat exemplu de implementare în Zend Framework.
  • Întrebare pentru karmavampire - știi cum să treci un handler pentru a crea un obiect diferit?
  • Comentariu despre de ce și cine are nevoie.
  • Problemă // Luați o matrice arbitrară
    $foo = matrice(
    „număr” => 1,
    "float" => 1.5,
    "array" => array(1,2),
    "șir" => "bară" ,
    „funcție” =>
    );
    // Acum convertiți matricea în JSON
    $json = json_encode($foo);
    // Dă-i clientului
    echo $json; Rezultat (
    „număr” :1,
    "plutitor" :1,5,
    "matrice" :,
    "șir" :"bară" ,
    "function" :"function())(return \"foo bar\";)"
    }
    * Acest cod sursă a fost evidențiat cu Sursa de evidențiere a codului.

    Deoarece dacă nu includeți definiția funcției între ghilimele, adică dacă nu o definiți ca șir, codul nu va fi executat. Deci, în principiu, jscon_encode() nu este potrivit pentru implementarea acestei funcționalități.

    Soluţie
  • Trecem prin matricea care va fi codificată.
  • Verificăm valoarea codificată pentru prezența unei definiții de funcție.
  • Ne amintim valoarea și o înlocuim cu o etichetă unică.
  • Codificăm tabloul modificat folosind json_encode().
  • Înlocuiți eticheta unică cu valoarea inițială.
  • Trimitem JSON clientului.
  • // Matrice procesată.
    $foo = matrice(
    „număr” => 1,
    "float" => 1.5,
    "array" => array(1,2),
    "string" => "bara" ,
    "function" => "function())(return "foo bar";)"
    );

    $valoare_arr = matrice();
    $inlocuire_chei = array();
    foreach ($foo ca $cheie => &$valoare )(
    // Verificați valorile pentru definirea funcției
    dacă (strpos($valoare , „funcție(” )===0)(
    // Amintiți-vă valoarea pentru înlocuirea ulterioară.
    $valoare_arr = $valoare ;
    // Înlocuiește definiția funcției cu o etichetă „unica”.
    $valoare = "%" . $key . „%” ;
    // Amintiți-vă eticheta pentru înlocuire ulterioară.
    $replace_keys = """ . $valoare . """ ;
    }
    }

    // Codificați matricea în JSON
    $json = json_encode($foo);

    // $jsonul rezultat va arăta astfel:
    {
    „număr” :1,
    "plutitor" :1,5,
    "matrice" :,
    "șir" :"bară" ,
    "function" :"%function%"
    }

    // Înlocuiește cu valorile originale.
    $json = str_replace($replace_keys, $value_arr, $json);

    // Trimite către client.
    echo $json;

    // Clientul va primi JSON astfel:
    {
    „număr” :1,
    "plutitor" :1,5,
    "matrice" :,
    "șir" :"bară" ,
    „funcție” :funcție())(întoarce „foo bar” ;)
    }

    * Acest cod sursă a fost evidențiat cu Sursa de evidențiere a codului.

    Acum, în obiectul rezultat, „funcție” nu este un șir, ci o funcție. De fapt, problema este rezolvată. Dacă utilizați această soluție împreună cu Prototype, va arăta cam așa:
    Ajax.Request nou ("json_server.php" , (
    metoda:"obține",
    onSuccess: function(transport)(
    var json = transport.responseText.evalJSON();
    alert(json.function()); // => Va fi afișată alerta „foo bar”.
    }
    });

    * Acest cod sursă a fost evidențiat cu Sursa de evidențiere a codului.

    Implementare în Zend Framework: $foo = array(
    "intger" => 9,
    "șir" => "șir de test" ,
    "funcție" => Zend_Json_Expr(
    „funcție())( window.alert(„funcție javascript codificată de Zend_Json”))”
    ),
    );

    Zend_Json::encode($foo, false , array("enableJsonExprFinder" => true ));
    // va returna șirul codificat json:
    {
    „întreg” :9,
    "șir" :"șir de testare",
    "funcție" :funcție())(
    window.alert("funcție javascript codificată de Zend_Json" )
    }
    }

    * Acest cod sursă a fost evidențiat cu Sursa de evidențiere a codului.

    JSON (JavaScript Object Notation) este un format pentru schimbul de date sub formă de text. Permite transferul de structuri complexe de date în formă serializată. Acest format de transfer de date a devenit atât de popular încât deja în nucleul PHP, începând cu versiunea 5.2.0, au fost adăugate funcții de procesare a datelor în acest format. Aceasta înseamnă că nu este nevoie să conectați extensii suplimentare. Formatul de date JSON este foarte ușor de citit de om. În plus, acest tip de schimb de date este utilizat pe scară largă între diverse servicii API. Și cu dezvoltarea corectă a algoritmilor pentru schimbul de informații, puteți obține o creștere a vitezei foarte mare decât, de exemplu, atunci când lucrați cu date în format XML.

    Trimiterea datelor

    Există două moduri de a trimite date în format JSON: formați o solicitare GET sau POST cu date codificate situate într-o variabilă GET sau POST sau plasați datele în corpul documentului. În practică, a doua opțiune este de obicei utilizată.

    Pentru a trimite date, sunt necesare următoarele funcții:

    • șir json_encode (valoare mixtă [, opțiuni int = 0])

      Parametrul value specifică datele care trebuie codificate. Orice tip este acceptat, cu excepția tipului resursă. Parametrul opțiuni conține o mască de biți a posibilelor valori furnizate (vezi tabelul cu constantele JSON furnizate).

    • resursă stream_context_create (])

      Această funcție este concepută pentru a crea și returna un context de fir cu opțiunile specificate în parametrul opțiuni. Parametrul opțional opțional trebuie să fie de tip matrice asociativă. Inițial, este gol. Al doilea parametru opțional params trebuie să fie, de asemenea, o matrice asociativă în formatul $data['nume'] = valoare.

    • șir file_get_contents (șir nume de fișier [, bool use_include_path [, contextul resursei [, int offset [, int maxlen ]]]])

      Utilizarea acestei funcții vă permite să obțineți conținutul unui fișier ca șir. Parametrul nume de fișier este numele fișierului de citit. În parametrul use_include_path, începând cu PHP 5, puteți folosi constanta FILE_USE_INCLUDE_PATH pentru a căuta un fișier în calea include. Parametrul context reprezintă resursa context creată folosind funcția stream_context_create(). Dacă încercarea de a deschide fișierul eșuează, valoarea va fi returnată fals. Parametrul offset conține offset-ul de la care va începe citirea datelor. Parametrul maxlen specifică dimensiunea datelor primite.

      Notă: offset-ul nu este specificat atunci când lucrați cu fire de la distanță.

    Mai jos este un exemplu de trimitere a datelor în format JSON:

    // Date de trimis $request = array("StartDate" => "2013-10-10", "EndDate" => "2013-10-10", "IDS" => array(1,2,3,4 ,5,6,7)); // Specificarea opțiunilor pentru contextul fluxului $options = array ("http" => matrice ("method" => "POST", "header" => "Content-Type: application/json; charset=utf-8\r \ n", "conținut" => json_encode($request))); // Creați un context de flux $context = stream_context_create($opțiuni); // Trimiterea datelor și obținerea rezultatului echo file_get_contents("http://test.ru/json.php", 0, $context);

    Aici este utilizată o structură de date improvizată, constând dintr-o dată de început și de sfârșit, precum și o serie de numere ale unor înregistrări condiționate. Vă rugăm să rețineți că în antetul cererii Tip de conținut este specificat tipul „application/json”.

    Primirea datelor

    Pentru a primi datele transmise în modul descris mai sus, este necesar să citiți datele din fluxul de intrare „ php://input”.

    Funcții utilizate pentru acceptarea datelor:

    • mixed json_decode (șir json [, bool assoc = false [, int depth = 512 [, int opțiuni = 0 ]]])

      Această funcție decodifică un șir în format JSON. Parametrul json specifică șirul de decodat. Parametrul assoc controlează dacă datele returnate vor fi convertite într-o matrice asociativă. Dacă există o astfel de nevoie, atunci trebuie să specificați ca valoare a acestui parametru adevărat. Parametrul depth indică adâncimea recursiunii. Iar ultimul al patrulea parametru, opțiuni, conține o mască de biți de opțiuni pentru decodare. Momentan doar acceptat JSON_BIGINT_AS_STRING(în mod implicit, numerele întregi mari sunt convertite în numere în virgulă mobilă (float))

    • resource fopen (nume fișier șir , mod șir [, bool use_include_path [, context resursă ]])

      Deschide un fișier și returnează mânerul acestuia. Parametrul nume de fișier este o resursă numită care indică un fișier. Parametrul mode specifică tipul de acces la fișier (vezi tabelul cu o listă de moduri posibile pentru fopen()). Urmează doi parametri opționali: use_include_path și context . Când setați use_include_path la adevărat sau 1 și cu condiția ca o cale relativă să fie specificată ca resursă numită, fișierul care urmează să fie deschis va fi căutat în lista directoarelor utilizate de funcții includeŞi cere. În practică, acest parametru practic nu este utilizat. Parametrul de context este utilizat pentru a specifica contextul resursei.

    • șir stream_get_contents (mâner de resurse [, int maxlen = -1 [, int offset = -1 ]])

      Această funcție vă permite să obțineți conținutul unui flux ca șir. Parametrul handle este o resursă fir. Parametrul maxlen conține numărul maxim de octeți de citit. În mod implicit, este setat la -1, ceea ce indică faptul că toate datele sunt primite. Parametrul offset conține offset-ul de la care va începe citirea datelor. Implicit este, de asemenea, setat la -1, ceea ce înseamnă că citirea se va face din poziția de pornire.

    Mai jos este un exemplu de primire a datelor în format JSON pe partea de server:

    // Deschide fluxul de intrare pentru citirea $f = fopen("php://input", "r"); // Obține conținutul fluxului $date = stream_get_contents($f); if ($date) ( // Cod de procesare print_r(json_decode($data)); )

    Structura de date rezultată:

    Obiect StdClass ( => 2013-10-10 => 2013-10-10 => Array ( => 1 => 2 => 3 => 4 => 5 => 6 => 7))

    Notă: este necesar să se țină cont de faptul că pentru a lucra cu formatul JSON, datele trebuie să fie codificate în utf-8.

    JSON a furnizat constante pentru funcția json_encode().

    JSON_HEX_TAG (întreg) Toate sunt codificate în \u003C și \u003E. Disponibil începând cu PHP 5.3.0.
    JSON_HEX_AMP (întreg) Toate & sunt codificate în &. Disponibil începând cu PHP 5.3.0.
    JSON_HEX_APOS (întreg) Toate caracterele ' sunt codificate în \u0027. Disponibil începând cu PHP 5.3.0.
    JSON_HEX_QUOT (întreg) Toate caracterele " sunt codificate în \u0022. Disponibil începând cu PHP 5.3.0.
    JSON_FORCE_OBJECT (întreg) Returnează un obiect în loc de o matrice atunci când utilizați o matrice non-asociativă. Acest lucru este util atunci când programul sau codul de recepție așteaptă un obiect sau matricea este goală. Disponibil începând cu PHP 5.3.0.
    JSON_NUMERIC_CHECK (întreg) Codificarea șirurilor care conțin numere ca numere. Disponibil începând cu PHP 5.3.3.
    JSON_BIGINT_AS_STRING (întreg) Codifică numere întregi mari ca echivalente ale șirului lor. Disponibil începând cu PHP 5.4.0.
    JSON_PRETTY_PRINT (întreg) Utilizați caractere cu spații albe în datele returnate pentru a le formata. Disponibil începând cu PHP 5.4.0.
    JSON_UNESCAPED_SLASHES (întreg) Nu scapi /. Disponibil începând cu PHP 5.4.0.
    JSON_UNESCAPED_UNICODE (întreg) Nu codificați caractere Unicode pe mai mulți octeți (acestea sunt codificate ca \uXXXX în mod implicit). Disponibil începând cu PHP 5.4.0.

    Lista modurilor posibile pentru fopen() folosind mode

    'r' Deschide fișierul numai în citire; plasează indicatorul la începutul fișierului.
    'r+' Deschide un fișier pentru citire și scriere; plasează indicatorul la începutul fișierului.
    'w' Deschide fișierul numai pentru scriere; plasează un indicator la începutul fișierului și trunchiază fișierul la lungimea zero. Dacă fișierul nu există, încearcă să-l creeze.
    'w+' Deschide un fișier pentru citire și scriere; plasează un indicator la începutul fișierului și trunchiază fișierul la lungimea zero. Dacă fișierul nu există, încearcă să-l creeze.
    'o' Deschide fișierul numai pentru scriere; plasează indicatorul la sfârșitul fișierului. Dacă fișierul nu există, încearcă să-l creeze.
    'a+' Deschide un fișier pentru citire și scriere; plasează indicatorul la sfârșitul fișierului. Dacă fișierul nu există, încearcă să-l creeze.
    'x' Creează și deschide doar pentru scris; plasează indicatorul la începutul fișierului. Dacă fișierul există deja, apelul fopen() va eșua, va returna FALSE și va genera o eroare E_WARNING. Dacă fișierul nu există, va încerca să-l creeze. Acest lucru este echivalent cu specificarea steagurilor O_EXCL|O_CREAT pentru apelul de sistem intern open(2).
    'x+' Creează și deschide spre citit și scris; altfel are același comportament ca „x”.
    'c' Deschide fișierul doar pentru scriere. Dacă fișierul nu există, acesta este creat. Dacă fișierul există, atunci nu este trunchiat (spre deosebire de „w”), iar apelarea acestei funcții nu provoacă o eroare (ca în cazul lui „x”). Indicatorul fișierului va fi setat la începutul fișierului. Acest lucru poate fi util dacă doriți să blocați fișierul (vezi flock()) înainte de a-l schimba, deoarece folosirea „w” poate trunchia fișierul înainte ca blocarea să fie obținută (dacă doriți să trunchiați fișierul, puteți utiliza ftruncate () funcția după solicitarea blocării).
    'c+' Deschide un fișier pentru citire și scriere; altfel are același comportament ca „c”.

    Cum se trimite Ajax o listă de obiecte (List) în format JSON

    Exemplul 1 $(document).ready(function () ( $("body").on("click", "button", function () ( var product = JSON.stringify(( "Nume": $("textarea ").val(), "Cost": $("input").val(), )); console.log(produs); $.ajax(( url: "/Produse/AjaxCreate/", metoda: " POST", contentType: "aplicație/json", date: produs, succes: funcție (răspuns) ( console.log(răspuns); ) )); )); ));

    Controlor

    Public ActionResult AjaxCreate(Produs produs)( return Json(new (rezultat = „succes”), JsonRequestBehavior.AllowGet); )

    Exemplul 2 //Salvarea unei facturi $("body").on("click", "button", function () ( //Asamblați tabelul ca o matrice de obiecte var billDetails = ; $(".item"). each(funcție ( ) ( var name = $(this).find(".name").val(); //Name var cantitate = parseInt($(this).find(".quantity").val() ); // Cantitate var price = parseFloat($(this).find(".price").val());//Price var summ = parseFloat($(this).find(".item-summ") .attr(„valoare”));//Suma var productId = parseFloat($(this).find(”.item-id”).attr(„valoare”));//Id articol var productSkuId = parseInt($ (this). find(".item-sku-id").attr("value"));//Id-ul ofertei comerciale a produsului var notRec = $(this).find(".item-not-rec" ).prop("verificat ");//Luați în considerare produsul sau nu billDetails.push(( Nume: nume, Cantitate: cantitate, Preț: preț, Sumă: sum, ProductId: productId, ProductSkuId: productSkuId, NotRec: notRec )); console.log (billDetails = JSON.stringify(("billDetails": billDetails )); /", metoda: "POST", contentType: "aplicație/json", date: billDetails, succes: funcție (răspuns) ( window.location.replace ("/Bills/List/");

    Controlor

    ) )); returnează fals; ));

    Solicitare Ajax către controler și primirea unui răspuns Json $(document).ready(function () ( $.ajax(( url: "/ Suppliers/AjaxGetSuppliersList/", metoda: "GET", succes: funcție (răspuns)) ( date = JSON .stringify(response.suppliers); var list = eval("(" + data + ")"); () ;//Șterge lista de elemente //adăugați lista rezultată de elemente la selectarea $.each(response.suppliers, function (key, value) ( ​​​​$(".supplier-select").append( "" + valoare.Nume + "" ));

    Controlor

    Public ActionResult AjaxGetSuppliersList() ( Lista furnizori = Supplier.GetSuppliers(); return Json(new (furnizori), JsonRequestBehavior.AllowGet); )

    Am o pagină de înregistrare pentru a permite utilizatorilor să se înregistreze. Trebuie să-mi confirm numărul de telefon înainte de a mă înregistra. Am dat adresa serviciului web împreună cu parametrii acestuia.
    parametrii pe care i-am dat:

    Http://********* Metodă: POST Anteturi: Tipul conținutului: aplicație/json Corp: următoarele în: ( "mobileNo":"0*********", " service":"****", "Code1":"*****", "conținut":"bună", "actionDate":"2017/09/26", "requestId":"1")

    si iata codul pe care l-am gasit pe internet:

    $date = array("mobileNo" => "****", "service" => "***", "Code1" => "*****", "conținut" => "55", "actionDate" => "2017/09/26"); $options = array("http" => array("method" => "POST", "content" => json_encode($date), "header" => "Content-Type: application/json" . "Accept: aplicație/json"); $url = "******"; $context = stream_context_create($opțiuni); $rezultat = file_get_contents($url, false, $context); $răspuns = json_decode($rezultat);

    și iată eroarea pe care o întâlnesc când verific local:

    File_get_contents(http://********/sms-gateway/sms-external-zone /receive): a eșuat la deschiderea fluxului: o încercare de conectare a eșuat deoarece partea conectată nu a răspuns corect după o perioadă de timp , sau conexiunea stabilită a eșuat deoarece gazda conectată nu a răspuns.

    și nu există nicio eroare și niciun rezultat (primiți SMS) ca răspuns când testez online (server cpanel)

    Pe baza parametrilor dați, unde greșesc?

    Mulţumesc anticipat.

    Soluţie

    Pe baza erorii dvs., serviciul dvs. nu răspunde. Ați încercat să îl deschideți într-un browser pentru a vedea dacă există răspunsul?

    Este posibil ca serviciul pe care încercați să îl apelați să vă solicite să furnizați o adresă IP statică de la serverul dvs. web, deoarece acestea oferă doar acces la nivel de IP. Aceasta înseamnă că IP-ul tău este blocat până când ei o permit.

    Vă sugerez să utilizați cURL pentru a vă îndeplini solicitarea. În acest fel, aveți date viitoare de depanat dacă lucrurile nu funcționează. Tot aici, dacă serviciul nu răspunde, doriți să obțineți orice altă informație.

    $date = array("mobileNo" => "****", "service" => "***", "Code1" => "*****", "conținut" => "55", "actionDate" => "2017/09/26"); $url = "******"; $ch = curl_init($url); // setați datele ca șir json curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($date)); // definiți json ca tip de conținut curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type:application/json")); // spune lui curl să preia datele returnate curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // urmărește locația dacă redirecționarea se întâmplă ca http la https curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // trimite cerere $rezultat = curl_exec($ch); // îți dă rezultatul - de cele mai multe ori vrei doar acest var_dump($rezultat); // în scopul depanării, vă oferă toate informațiile despre conexiune var_dump(curl_getinfo($ch)); // returnează orice erori apărute var_dump(curl_error($ch)); curl_close($ch);

    Cu siguranță ați auzit vreodată de JSON. Ce este asta? Ce poate face și cum să-l folosească?

    În acest tutorial vom acoperi elementele de bază ale JSON și vom acoperi următoarele puncte:

    • Ce este JSON?
    • Pentru ce este folosit JSON?
    • Cum se creează un șir JSON?
    • Un exemplu simplu de șir JSON.
    • Să comparăm JSON și XML.
    • Cum se lucrează cu JSON în JavaScript și PHP?
    Ce este JSON?

    JSON este o modalitate simplă, bazată pe text, de a stoca și transmite date structurate. Cu o sintaxă simplă, puteți stoca cu ușurință orice, de la un singur număr la șiruri, matrice și obiecte în text simplu. De asemenea, puteți lega matrice și obiecte împreună pentru a crea structuri complexe de date.

    Odată creat șirul JSON, este ușor să îl trimiteți către o altă aplicație sau către o altă locație din rețea deoarece este text simplu.

    JSON are următoarele avantaje:

    • Este compact.
    • Propozițiile sale sunt ușor de citit și compus atât de oameni, cât și de computere.
    • Poate fi convertit cu ușurință într-o structură de date pentru majoritatea limbajelor de programare (numere, șiruri de caractere, booleeni, matrice etc.)
    • Multe limbaje de programare au funcții și biblioteci pentru citirea și crearea structurilor JSON.

    Numele JSON înseamnă JavaScript Object Notation. După cum sugerează și numele, se bazează pe o modalitate de definire a obiectelor (cum ar fi crearea de tablouri asociative în alte limbi) și tablouri.

    Pentru ce este folosit JSON?

    Cea mai obișnuită utilizare a JSON este trimiterea datelor de la server la browser. De obicei, datele JSON sunt furnizate folosind AJAX, ceea ce permite browserului și serverului să comunice fără a fi nevoie să reîncărcați pagina.

  • Utilizatorul face clic pe o miniatură a unui produs dintr-un magazin online.
  • JavaScript care rulează pe browser generează o solicitare AJAX către scriptul PHP care rulează pe server, pasând ID-ul produsului selectat.
  • Scriptul PHP primește numele produsului, descrierea, prețul și alte informații din baza de date. Apoi compune un șir JSON din date și îl trimite în browser.
  • JavaScript care rulează în browser primește șirul JSON, îl decodifică și afișează informațiile despre produs pe pagină pentru utilizator.
  • De asemenea, puteți utiliza JSON pentru a trimite date din browser către server, trecând un șir JSON ca parametru la solicitările GET sau POST. Dar această metodă este mai puțin comună, deoarece transferul de date prin solicitări AJAX poate fi simplificat. De exemplu, ID-ul produsului poate fi inclus în adresa URL ca parte a unei solicitări GET.

    Biblioteca jQuery are mai multe metode, cum ar fi getJSON() și parseJSON(), care facilitează recuperarea datelor folosind JSON prin solicitări AJAX.

    Cum se creează un șir JSON?

    Există câteva reguli de bază pentru crearea unui șir JSON:

    • Șirul JSON conține fie o matrice de valori, fie un obiect (o matrice asociativă de perechi nume/valoare).
    • Matrice este cuprins între paranteze drepte ([ și ]) și conține o listă de valori separate prin virgulă.
    • Obiect este cuprins între acolade (( și )) și conține o listă de perechi nume/valoare, separate prin virgulă.
    • pereche nume/valoare constă din numele câmpului cuprins între ghilimele duble, urmat de două puncte (:) și valoarea câmpului.
    • Sensîntr-o matrice sau obiect poate exista:
      • Număr (întreg sau virgulă mobilă)
      • Șir (între ghilimele duble)
      • Valoare booleană (adevărat sau fals)
      • O altă matrice (închisă între paranteze drepte)
      • Un alt obiect (închis între acolade)
      • valoare nulă

    Pentru a include ghilimele duble într-un șir, trebuie să utilizați o bară oblică inversă: \" . Ca și în cazul multor limbaje de programare, puteți pune caractere de control și coduri hexadecimale într-un șir precedându-le cu o bară oblică inversă. Pentru detalii, consultați site-ul web JSON.

    Exemplu simplu de șir JSON

    Mai jos este un exemplu de comandă în format JSON:

    ( „comanda comandă”: 12345, „nume cumpărător”: „Vanya Ivanov”, „e-mail cumpărător”: „ [email protected]„, „conținut”: [ ( „productID”: 34, „productName”: „Super produs”, „cantitate”: 1 ), ( „productID”: 56, „productName”: „Produs miraculos”, „cantitate”: 3 ) ], „comandă finalizată”: adevărat )

    Să ne uităm la linie în detaliu:

    • Creăm un obiect folosind acolade (( și )).
    • Obiectul are mai multe perechi nume/valoare: „orderID”: 12345 Proprietate cu nume „orderId” și valoare întreagă 12345 „shopperName”: „Vanya Ivanov” proprietate cu numele „shopperName” și valoare șir „Vanya Ivanov” „shopperEmail”: „ [email protected]„ O proprietate numită „shopperEmail” cu o valoare șir „ [email protected]" "contents": [ ... ] O proprietate numită "contents" a cărei valoare este o matrice "orderCompleted": true O proprietate numită "orderCompleted" și valoarea booleană true
    • Există 2 obiecte în matricea „conținut” reprezentând articole individuale din ordine. Fiecare obiect conține 3 proprietăți: productID , productName și cantitate .

    Apropo, deoarece JSON se bazează pe declararea obiectelor JavaScript, puteți face rapid și ușor șirul JSON de mai sus un obiect JavaScript:

    var coș = ( "comanda comandă": 12345, "numele cumpărătorului": "Vanya Ivanov", "shopperEmail": " [email protected]„, „conținut”: [ ( „productID”: 34, „productName”: „Super produs”, „cantitate”: 1 ), ( „productID”: 56, „productName”: „Produs miraculos”, „cantitate”: 3 ) ], „comandaCompleted”: adevărat );

    Comparație între JSON și XML

    În multe feluri, vă puteți gândi la JSON ca o alternativă la XML, cel puțin în spațiul aplicației web. Conceptul de AJAX sa bazat inițial pe utilizarea XML pentru a transfera date între server și browser. Dar în ultimii ani, JSON a devenit din ce în ce mai popular pentru transportul datelor AJAX.

    În timp ce XML este o tehnologie dovedită care este utilizată într-un număr destul de mare de aplicații, JSON are avantajul de a fi un format de date mai compact și mai ușor de recunoscut.

    Iată cum ar arăta obiectul exemplu de mai sus în XML:

    ID comandă 12345 Nume cumpărător Vanya Ivanov E-mail cumpărător [email protected] continut productID 34 productName Super produs cantitate 1 produs ID 56 productName Miracle produs cantitate 3 comanda Completat adevarat

    Versiunea XML este semnificativ mai mare. În realitate, are 1128 de caractere, în timp ce versiunea JSON are doar 323 de caractere. Versiunea XML este, de asemenea, destul de greu de înțeles.

    Desigur, acesta este un exemplu radical. Și este posibil să creați o înregistrare XML mai compactă. Dar chiar și va fi semnificativ mai lung decât echivalentul JSON.

    Lucrul cu un șir JSON în JavaScript

    JSON are un format simplu, dar crearea manuală a unui șir JSON este destul de obositoare. În plus, adesea trebuie să luați un șir JSON, să convertiți conținutul acestuia într-o variabilă care poate fi folosită în cod.

    Majoritatea limbajelor de programare au instrumente pentru a converti cu ușurință variabilele în șiruri JSON și invers.

    Crearea unui șir JSON dintr-o variabilă

    JavaScript are încorporată o metodă JSON.stringify() care preia o variabilă și returnează un șir JSON reprezentând conținutul acesteia. De exemplu, să creăm un obiect JavaScript care conține informațiile despre comandă din exemplul nostru și apoi să creăm un șir JSON din acesta:

    var coș = ( "comanda comandă": 12345, "numele cumpărătorului": "Vanya Ivanov", "shopperEmail": " [email protected]„, „conținut”: [ ( „productID”: 34, „productName”: „Super produs”, „cantitate”: 1 ), ( „productID”: 56, „productName”: „Produs miraculos”, „cantitate”: 3 ) ], „orderCompleted”: true ; alertă (JSON.stringify(cart));

    Acest cod va produce:

    Rețineți că metoda JSON.stringify() returnează un șir JSON fără spații. Este mai greu de citit, dar este mai compact pentru transmiterea prin rețea.

    Există mai multe modalități de a analiza un șir JSON în JavaScript, dar cel mai sigur și mai de încredere este să utilizați metoda încorporată JSON.parse(). Primește un șir JSON și returnează un obiect sau o matrice JavaScript care conține datele. De exemplu:

    var jsonString = " \ ( \ "orderID": 12345, \ "shopperName": "Vanya Ivanov", \ "shopperEmail": " [email protected]", \ "conținut": [ \ ( \ "productID": 34, \ "productName": "Super produs", \ "cantitate": 1 \), \ ( \ "productID": 56, \ "productName": „Mărfuri miraculoase”, \ „cantitate”: 3 \ ) \ ], \ „comandă finalizată”: adevărat \ ) \ "; var cart = JSON.parse(jsonString); alert(cart.shopperEmail); alert(cart.contents.productName);

    Am creat o variabilă jsonString care conține șirul JSON al ordinii noastre exemplu. Apoi trecem acest șir la metoda JSON.parse(), care creează un obiect care conține datele JSON și îl stochează în variabila cart. Tot ce rămâne este să verificați prin afișarea proprietăților obiectului shopperEmail și productName al matricei de conținut.

    Ca rezultat, vom obține următorul rezultat:

    Într-o aplicație reală, codul JavaScript va primi comanda ca șir JSON într-un răspuns AJAX de la scriptul serverului, va transmite șirul la metoda JSON.parse() și apoi va folosi datele pentru a le afișa pe pagina utilizatorului.

    JSON.stringify() și JSON.parse() au alte capabilități, cum ar fi utilizarea funcțiilor de apel invers pentru a converti anumite date personalizate. Astfel de opțiuni sunt foarte utile pentru a converti diferite date în obiecte JavaScript adecvate.

    Lucrul cu un șir JSON în PHP

    PHP, ca și JavaScript, are funcții încorporate pentru lucrul cu șiruri JSON.

    Crearea unui șir JSON dintr-o variabilă PHP

    Funcția json_encode() preia o variabilă PHP și returnează un șir JSON reprezentând conținutul variabilei. Iată exemplul nostru de comandă, scris în PHP:

    Acest cod returnează exact același șir JSON ca în exemplul JavaScript:

    ("orderID":12345,"shopperName":"Vanya Ivanov","shopperEmail":" [email protected]","contents":[("productID":34,"productName":"Super produs","cantitate":1),("productID":56,"productName":"Produs miraculos","cantitate": 3)],"orderCompleted":true)

    Într-o aplicație reală, scriptul dvs. PHP va trimite acest șir JSON ca parte a unui răspuns AJAX către browser, unde codul JavaScript, folosind metoda JSON.parse(), îl va analiza înapoi într-o variabilă pentru afișare pe pagina utilizatorului .

    Puteți trece diferite steaguri ca al doilea argument funcției json_encode(). Cu ajutorul lor, puteți schimba principiile de codificare a conținutului variabilelor într-un șir JSON.

    Creați o variabilă dintr-un șir JSON

    Pentru a converti un șir JSON într-o variabilă PHP, utilizați metoda json_decode(). Să înlocuim exemplul nostru pentru JavaScript cu metoda JSON.parse() cu cod PHP:

    Ca și în cazul JavaScript, acest cod va produce:

    [email protected] Produs miraculos

    În mod implicit, funcția json_decode() returnează obiecte JSON ca obiecte PHP. Există obiecte PHP generice din clasa stdClass. De aceea folosim -> pentru a accesa proprietățile obiectului din exemplul de mai sus.

    Dacă aveți nevoie de un obiect JSON ca matrice PHP asociată, trebuie să treceți true ca al doilea argument funcției json_decode(). De exemplu:

    $cart = json_decode($jsonString, adevărat); echo $cart["shopperEmail"] . "
    "; echo $cart["conținut"]["productName"] . "
    ";

    Acest cod va produce aceeași ieșire:

    [email protected] Produs miraculos

    De asemenea, puteți transmite alte argumente funcției json_decode() pentru a specifica adâncimea recursiunii și cum să gestionați numerele întregi mari.

    Concluzie

    Deși JSON este ușor de înțeles și de utilizat, este un instrument foarte util și flexibil pentru transferul de date între aplicații și computere, mai ales când se utilizează AJAX. Dacă intenționați să dezvoltați o aplicație AJAX, atunci nu există nicio îndoială că JSON va deveni un instrument esențial în atelierul dvs.