Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Savjet
  • Generiranje i raščlanjivanje JSON podataka u PHP-u. JSON prikaz podataka

Generiranje i raščlanjivanje JSON podataka u PHP-u. JSON prikaz podataka

funkcija getData (id) ($ .ajax ((url: "neki url", crossDomain: true, tip: "post", podaci: (id: id), uspjeh: funkcija (podaci) (var json = jQuery.parseJSON) ( podaci); upozorenje (podaci);),)););

$ name, "clubID" => $ clubID, "lID" => $ lID, "sName" => $ sName, "description" => $ desc)); echo $ json; ?>

Javascript upozorenja u obliku, ... Što ne bi trebalo biti ovako ...

Nemojte ponavljati $ ID u svom PHP-u. Koristite jQuery dataType ajax svojstvo i postavite ga na json. Koristite zadani javascript json parser.

pokušati obavijestiti json, a ne podatke?

Javascript vraća objekt jer zapravo upozoravate objekt. Pokušajte upozorenje (data.name);

ili upozorenje (data.clubID); , ovo će uspjeti.

Morate navesti vrstu podataka koju tražite ajax zahtjev inače će jQuery inteligentno otkriti na temelju MIME tipa. Ako ajax poziv primi json podatke, koristit će ih kao JavaScript objekt pa dobivate ovo upozorenje.

To je u redu.

JSON je objekt. aka Javascript notacija objekata... Ovo bi trebao biti samo slučaj. Trebao bi sadržavati vaše podatke. Pokušajte s podacima. *.

Usput, ako ne izbrišete podatke koji dolaze od vaših korisnika prije nego ih koristite s bilo kojim SQL upitom, to će uzrokovati probleme.

Pogledajte to na djelu s osnovnim primjerom:

// $ _POST ["id"] = "" OR 1 "" $ result = mysql_query ("SELECT * FROM clubmember WHERE clubID =" ". $ ID." "");

Vaš upit sada

SELECT * FROM clubmember WHERE clubID = "" OR 1 ""

Budući da je 1 uvijek istina, sada mogu uzeti cijeli tvoj klubski stol. pozdrav.

Čak i ako parseJSON vrati objekt, izvršenje console.log bi trebalo pokazati koji je niz objekata

Poziv .ajax () će, ako nije naveden tip podataka, "razumno pogoditi" što vraća tražena stranica.
U slučaju JSON-a, on će proslijediti JavaScript objekt funkciji uspjeha.

Nakon pregleda vaših pitanja, vjerujem da razumijem što mislite. Ono što očekujete je jedan objekt (tražite s korištenjem SQL-a kao što je rečeno vrlo nesigurno) s 5 svojstava, imenom, ID-om kluba, ID-om, sNazivom i opisom. Međutim, izgleda da se vraćate, je li to više redaka s dva svojstva?
Kažete da dok php skripta echo ima ispravne vrijednosti(jedan red), ali JSON dobiva više vrijednosti (/ redaka).
Jeste li sigurni da PHP dobiva ispravan ID iz AJAX poziva?

U ovom članku želim govoriti o formatu za razmjenu tekstualnih podataka - JSON, odnosno o radu s ovim formatom u PHP-u.

JSON je kompaktni format tekstualnih podataka. Može se koristiti i u uslugama internetskog prijenosa podataka i za pohranu informacija u strukturiranom obliku.

JSON ( Engleski Zapis objekata JavaScript) Je li format za razmjenu tekstualnih podataka koji se temelji na JavaScriptu i koji se obično koristi u ovom jeziku. Kao i mnogi drugi tekstualni formati Ljudi lako čitaju JSON.

Unatoč svom podrijetlu iz JavaScripta (točnije, iz podskupa standarda ECMA-262 iz 1999.), format se smatra neovisnim o jeziku i može se koristiti s gotovo svim programskim jezikom. Za mnoge jezike postoji spreman kod za stvaranje i obradu podataka u JSON format.

Praktične prednosti koristeći JSON otvara kada se koristi AJAX tehnologije... JSON je sažetiji i čitljiviji od XML-a, a izvorni je Javascript. Osim toga, moguće je umetnuti potpuno funkcionalne funkcije u JSON kod.

Da, upravo je u AJAX tehnologiji, po mom mišljenju, njena glavna primjena. Budući da AJAX tehnologija uključuje slanje zahtjeva klijenta na poslužitelj. Nadalje na poslužitelju zahtjev se obrađuje, a rezultat se šalje kao odgovor klijentu.

JSON prikaz podataka

JSON podržava sve glavne formate podataka: nizove, brojeve, logičke vrijednosti, kao i nizove i objekte (ključ: kombinacije vrijednosti, odvojene zarezima i zatvorene vitičastim zagradama).

Evo primjera predstavljanja podataka u JSON formatu:

("id": "1", "ime": "ivan", "zemlja": "Rusija", "ured": ["yandex", "menadžment"])

Pogledajmo što ovaj niz može prenijeti: osoba po imenu "ivan", pod identifikatorom "1", koja živi u zemlji "Rusija", radi za tvrtku "yandex" u odjelu "menadžment".

Navedimo još jedan primjer. Stranica ima obrazac Povratne informacije pokreće AJAX tehnologija. Posjetitelj ispunjava podatke, zatim ih šalje poslužitelju na provjeru, ako se ne pronađu greške, podaci se spremaju u bazu podataka i šalje se odgovor o uspješnom spremanju. Ali ako se pronađu pogreške, onda se vraća odgovor s vrstama pogrešaka.

Primjer odgovora na pogrešku u JSON formatu:

("error": "1", "errorcode": ["empty_pers", "empty_mail", "empty_phone", "empty_letter", "empty_scode"])

Što znači, na primjer:

  • Morate ispuniti polje "Kontakt osoba".
  • Morate ispuniti polje "E-mail".
  • Morate ispuniti polje "Telefon".
  • Unesite svoju poruku
  • Potrebno je popuniti polje "Broj na slici"

Ako nema grešaka, onda se vraća odgovor:

("pogreška": "0")

To govori o uspješnom slanju podataka.

U PHP-u se JSON ekstenzija koristi za predstavljanje podataka u JSON formatu. PHP verzije starije od 5.2.0 imaju podršku za JSON ugrađenu u jezgru, više ranim verzijama moraju biti povezani s vašom skriptom dodatna datoteka s funkcijama.

Dakle, u PHP-u su dvije funkcije odgovorne za rad s podacima u JSON formatu: json_encode () i json_decode ().

Pretvaranje podataka u JSON format

$ json_data = niz ("id" => 1, "name" => "ivan", "country" => "Rusija", "office" => niz ("yandex", "management")); echo json_encode ($ json_data);

Obrnuta konverzija podataka iz JSON formata

$ json_string = "(" id ": 1," naziv ":" ivan "," zemlja ":" Rusija "," ured ": [" yandex "," upravljanje "])"; $ obj = json_decode ($ json_string);

Sada će $ obj sadržavati JSON podatke prevedene u PHP objekt, kojem možete pristupiti na sljedeći način:

Echo $ obj-> ime; // Prikazat će ime ivan echo $ obj-> office; // Prikažite tvrtku yandex

Kao što vidite, $ obj-> office je niz.

Foreach ($ obj-> office kao $ val) echo $ val;

Rad s JSON-om omogućuje razmjenu podataka s poslužiteljem « čistom obliku» ... Potreba za slanjem glomaznih dijelova HTML koda potpuno je eliminirana.

JSON (JavaScript Object Notation) je format za razmjenu podataka u tekstualni oblik... Omogućuje prijenos složenih struktura podataka u serijaliziranom obliku. Ovaj format prijenosa podataka postao je toliko popularan da su funkcije za obradu podataka u ovom formatu dodane u PHP jezgru od verzije 5.2.0. To znači da nema potrebe za povezivanjem dodatna proširenja... JSON format podataka ljudi dobro razumiju. Štoviše dati tip razmjena podataka naširoko se koristi između različitih API usluga. A uz ispravan razvoj algoritama za razmjenu informacija, možete dobiti vrlo veliku brzinu nego, na primjer, kada radite s podacima u XML formatu.

Slanje podataka

Postoje dva načina slanja podataka u JSON formatu: formirajte GET ili POST zahtjev s kodiranim podacima koji se nalaze u varijabli GET ili POST ili stavite podatke u tijelo dokumenta. U praksi se obično koristi druga opcija.

Za slanje podataka potrebne su sljedeće funkcije:

  • niz json_encode(mješovita vrijednost [, int opcije = 0])

    Parametar vrijednosti je podatak koji je potrebno kodirati. Podržana je svaka vrsta osim vrste resurs... Parametar opcija sadrži bitmasku mogućih isporučenih vrijednosti (pogledajte tablicu za navedene JSON konstante).

  • resurs stream_context_create (])

    Ova funkcija namijenjena je stvaranju i vraćanju konteksta toka s opcijama navedenim u parametru opcija. Opcijski parametar opcija mora biti tipa asocijativnog niza. U početku je prazan. Drugi izborni parametar parametara također mora biti asocijativni niz u formatu $ data [‘name’] = vrijednost.

  • niz file_get_contents(naziv datoteke niza [, bool use_include_path [, kontekst resursa [, int offset [, int maxlen]]]])

    Korištenje ove funkcije omogućuje vam da dobijete sadržaj datoteke kao niz. Parametar naziva datoteke je naziv datoteke za čitanje. U parametru use_include_path počevši od PHP verzije 5 možete koristiti konstantu FILE_USE_INCLUDE_PATH da biste pronašli datoteku u stazi za uključivanje. Parametar konteksta predstavlja resurs konteksta kreiran pomoću stream_context_create (). U slučaju neuspjelog pokušaja otvaranja datoteke, vrijednost će biti vraćena lažno... Parametar offset sadrži pomak od kojeg se počinju čitati podaci. Parametar maxlen specificira veličinu primljenih podataka.

    Bilješka: Offset nije naveden kada radite s udaljenim streamovima.

Ispod je primjer slanja podataka u JSON formatu:

// Podaci za slanje $ request = array ("StartDate" => "2013-10-10", "EndDate" => "2013-10-10", "IDS" => niz (1,2,3,4 , 5,6,7)); // Odredite opcije za kontekst streama $ options = array ("http" => array ("method" => "POST", "header" => "Content-Type: application / json; charset = utf-8 \ r \ n "," content "=> json_encode ($ zahtjev))); // Kreiraj kontekst streama $ context = stream_context_create ($ opcije); // Slanje podataka i primanje rezultata echo file_get_contents ("http://test.ru/json.php", 0, $ context);

Koristi improviziranu strukturu podataka koja se sastoji od datuma početka i završetka i niza brojeva za neke uvjetne zapise. Imajte na umu da u zaglavlju zahtjeva Vrsta sadržaja tip je "application / json".

Dohvaćanje podataka

Za primanje prenesenih podataka na gore opisani način potrebno je pročitati podatke iz ulaznog toka “ php: // ulaz”.

Funkcije koje se koriste za prihvaćanje podataka:

  • mješoviti json_decode(niz json [, bool assoc = false [, int dubina = 512 [, int opcije = 0]]])

    Ova funkcija dekodira JSON niz. Parametar json specificira niz za dekodiranje. Parametar assoc kontrolira hoće li se vraćeni podaci pretvoriti u asocijativni niz. Ako postoji takva potreba, tada morate navesti kao vrijednost ovog parametra pravi... Parametar dubine označava dubinu rekurzije. I posljednji četvrti parametar, opcije, sadrži bitmasku opcija za dekodiranje. Trenutno samo podržano JSON_BIGINT_AS_STRING(veliki cijeli brojevi se prema zadanim postavkama pretvaraju u float)

  • resurs fopen(naziv datoteke niza, način niza [, bool use_include_path [, kontekst resursa]])

    Otvara datoteku i vraća deskriptor datoteke. Parametar naziva datoteke je imenovani resurs koji ukazuje na datoteku. Parametar načina određuje vrstu pristupa datoteci (pogledajte tablicu s popisom mogućih načina za fopen ()). Zatim postoje dvije izborni parametri to su: use_include_path i kontekst. Kada postavite parametar use_include_path na pravi ili 1 i pod uvjetom da je dat imenovani resurs relativni put, datoteka koju treba otvoriti će se tražiti na popisu direktorija koje koriste funkcije uključiti i zahtijevati... U praksi se ovaj parametar praktički ne koristi. Parametar konteksta koristi se za određivanje konteksta resursa.

  • niz stream_get_contents(ručnik resursa [, int maxlen = -1 [, int pomak = -1]])

    Ova funkcija vam omogućuje da dobijete sadržaj streama kao niz. Parametar ručke je resurs niti. Maxlen parametar sadrži maksimalni iznos bajt za čitanje. Prema zadanim postavkama, postavljeno je na -1, što znači da su svi podaci primljeni. Parametar offset sadrži pomak od kojeg se počinju čitati podaci. Prema zadanim postavkama, također je postavljeno na -1, što znači da će se čitanje obaviti s početne pozicije.

U nastavku je primjer dobivanja podataka u JSON formatu na strani poslužitelja:

// Otvorite ulazni tok za čitanje $ f = fopen ("php: // input", "r"); // Dobivamo sadržaj toka $ data = stream_get_contents ($ f); if ($ data) (// kod za obradu print_r (json_decode ($ data));)

Rezultirajuća struktura podataka:

StdClass Objekt (=> 2013-10-10 => 2013-10-10 => Niz (=> 1 => 2 => 3 => 4 => 5 => 6 => 7))

Bilješka: potrebno je uzeti u obzir činjenicu da za rad s JSON formatom podaci moraju biti u utf-8 kodiranju.

Omogućio JSON konstante za funkciju json_encode ().

JSON_HEX_TAG (cijeli broj) Svi su kodirani u \ u003C i \ u003E. Dostupno od PHP 5.3.0.
JSON_HEX_AMP (cijeli broj) Svi & su kodirani u \ u0026. Dostupno od PHP 5.3.0.
JSON_HEX_APOS (cijeli broj) Svi znakovi' su kodirani u \ u0027. Dostupno od PHP 5.3.0.
JSON_HEX_QUOT (cijeli broj) Svi znakovi su "kodirani u \ u0022. Dostupno od PHP 5.3.0.
JSON_FORCE_OBJECT (cijeli broj) Emitirajte objekt umjesto niza kada koristite neasocijativni niz. Ovo je korisno kada program ili kod primatelj očekuje objekt ili je niz prazan. Dostupno od PHP 5.3.0.
JSON_NUMERIC_CHECK (cijeli broj) Kodirajte nizove koji sadrže brojeve kao brojeve. Dostupno od PHP 5.3.3.
JSON_BIGINT_AS_STRING (cijeli broj) Kodira velike cijele brojeve kao njihove ekvivalente niza. Dostupno od PHP 5.4.0.
JSON_PRETTY_PRINT (cijeli broj) Koristiti razmak znakova u vraćenim podacima da ih formatirate. Dostupno od PHP 5.4.0.
JSON_UNESCAPED_SLASHES (cijeli broj) Ne bježi /. Dostupno od PHP 5.4.0.
JSON_UNESCAPED_UNICODE (cijeli broj) Nemojte kodirati višebajtne Unicode znakovi(prema zadanim postavkama oni su kodirani kao \ uXXXX). Dostupno od PHP 5.4.0.

Popis mogućih načina za fopen () koristeći način

'R' Otvara datoteku samo za čitanje; stavlja pokazivač na početak datoteke.
'R +' Otvara datoteku za čitanje i pisanje; stavlja pokazivač na početak datoteke.
'W' Otvara datoteku samo za pisanje; postavlja pokazivač na početak datoteke i skraćuje datoteku na nultu duljinu. Ako datoteka ne postoji, pokušava je stvoriti.
'W +' Otvara datoteku za čitanje i pisanje; postavlja pokazivač na početak datoteke i skraćuje datoteku na nultu duljinu. Ako datoteka ne postoji, pokušava je stvoriti.
'A' Otvara datoteku samo za pisanje; stavlja pokazivač na kraj datoteke. Ako datoteka ne postoji, pokušava je stvoriti.
'A +' Otvara datoteku za čitanje i pisanje; stavlja pokazivač na kraj datoteke. Ako datoteka ne postoji, pokušava je stvoriti.
'X' Stvara i otvara samo za pisanje; stavlja pokazivač na početak datoteke. Ako datoteka već postoji, fopen () neće uspjeti, vratiti FALSE i izbaciti pogrešku razine E_WARNING. Ako datoteka ne postoji, pokušat će je stvoriti. Ovo je ekvivalentno određivanju oznaka O_EXCL | O_CREAT za interni otvoreni (2) poziv sustava.
'X +' Stvara i otvara za čitanje i pisanje; inače ima isto ponašanje kao 'x'.
'C' Otvara datoteku samo za pisanje. Ako datoteka ne postoji, onda je stvorena. Ako datoteka postoji, onda se ne skraćuje (za razliku od 'w'), a poziv ove funkcije ne uzrokuje pogrešku (kao što je slučaj s 'x'). Pokazivač datoteke bit će postavljen na početak datoteke. Ovo može biti korisno ako želite zaključati datoteku (pogledajte flock ()) prije promjene, budući da korištenje 'w' može skratiti datoteku prije preuzimanja zaključavanja (ako želite skratiti datoteku, možete koristiti ftruncate () nakon zahtjev za zaključavanje).
'C +' Otvara datoteku za čitanje i pisanje; inače ima isto ponašanje kao 'c'.

Vrhunski povezani članci