Curs Php-mysql

Transformare obiect JSON in Array asociativ
 

Acest tutorial arata cum se preia in PHP datele dintr-un sir cu obiect JSON, folosind json_decode().
Obiectul (sirul JSON) poate fi preluat dintr-o sursa externa. De exemplu, de la o adresa URL (cu file_get_contents(), sau cURL) care returneaza un sir cu date in obiect JSON, sau dintr-un fisier text de pe server, sau dintr-o baza de date.


Sa lucram cu un exemplu simplu; un obiect JSON salvat intr-un fisier text pe server.
Fisierul, denumit "sitedata.txt" contine acest sir, un obiect JSON simplu, cu 3 proprietati (url, category, nr_pages):
{"url": "https://coursesweb.net/", "category": "Web Development", "nr_pages": 400}
Folosim file_get_contents() pentru a citi datele (sirul) din fisierul text, apoi, cu json_decode() se transforma sirul intr-un obiect PHP.
<?php
$file = 'sitedata.txt'; // adresa /numele fisierului

// verifica daca fisierul exista
if(file_exists($file)) {
 $filedata = file_get_contents($file);

 /* Sau, se poate adauga direct acest sir:
 $filedata = '{"url": "https://coursesweb.net/", "category": "Web Development", "nr_pages": 400}';
 */

 // transforma sirul in obiect al clasei stdClass
 $objson = json_decode($filedata, true);

 // parcurge obiectul si afiseaza fiecare proprietate si valoarea ei
 foreach($objson AS $prop => $val) {
 echo '<br/>'. $prop .' - '. $val;
 }
}
else echo $file .' nu exista';
Afiseaza:
url - https://coursesweb.net/
category - Web Development
nr_pages - 400

Preluare date din obiect PHP

- Functia json_decode() transforma sirul JSON intr-un Obiect al clasei stdClass. Ca sa obtineti valoarea asociata unei anumite proprietati, se foloseste aceasta sintaxa:
$valoare = $obiect->nume_proprietate;
Sau, daca "nume_proprietate" este intr-o variabila, se foloseste aceasta sintaxa:
$property = 'nume_proprietate';
$valoare = $obiect->{$property};

Iata un alt exemplu;
<?php
// sir cu obiect JSON
$strjson = '{"url": "https://coursesweb.net/", "category": "Web Development", "nr_pages": 400}';

// transforma sirul in obiect al clasei stdClass
$objson = json_decode($strjson);

// preia valoarea unei anumite proprietati
$url = $objson->url;
echo '<br/>'. $url;

// preia valoarea unei proprietati cu numele salvat in variabila
$prop = 'category';
$val = $objson->{$prop};
echo '<br/>'. $val;
Acest cod va afisa:
https://coursesweb.net/
Web Development

Este important ca sirul sa fie un obiect JSON valid, altfel, functia json_decode() va returna False sau Null.

 

Transformare obiect JSON in Array asociativ

Daca vreti sa transformati sirul cu obiect JSON intr-un Array asociativ in PHP, adaugati True ca al doilea argument in json_decode().
Sintaxa:
$arr = json_decode($sir_json, true);
Exemplu:
<?php
// sir cu obiect JSON
$strjson = '{"url": "https://marplo.net/", "category": "Diverse", "nr_pages": 1500}';

// transforma sirul in array asociativ
$arrjson = json_decode($strjson, true);

// Test
var_dump($arrjson);

// preia valoarea unui anumit element
$url = $arrjson['url'];
echo '<br/>'. $url;

// preia valoarea unui element cu numele retinut in variabila
$elm = 'category';
$val = $arrjson[$elm];
echo '<br/>'. $val;
Rezulta:
array(3) { ["url"]=> string(18) "https://marplo.net/" ["category"]=> string(7) "Diverse" ["nr_pages"]=> int(1500) }
http://marplo.net/
Diverse
• Sirul JSON poate sa contina date mai complexe, cu o structura formata din mai multe obiecte si array. In acest caz trebuie sa stiti cum sa lucrati cu Array in PHP.
Iata un exemplu:
<?php
// sir cu obiect JSON, continand inca un obiect, si un Array
$strjson = '{
 "url": "https://marplo.net/",
 "category": {"ct1": "Web Development", "ct2": "Web Programming"},
 "courses": ["PHP-MySQL", "JavaScript", "HTML", "CSS"]
}';

// converteste sirul intr-un array asociativ
$arrjson = json_decode($strjson, true);

// Afiseaza structura array-ului
echo '<pre>';
var_export($arrjson);
echo '</pre>';

// preia prima categorie "ct1", si al doilea element in "courses"
$ct1 = $arrjson['category']['ct1'];
$course2 = $arrjson['courses'][1];

echo $ct1 .'<br/>'. $course2;
Rezulta:
array (
 'url' => 'https://marplo.net/',
 'category' => 
 array (
 'ct1' => 'Web Development',
 'ct2' => 'Web Programming',
 ),
 'courses' => 
 array (
 0 => 'PHP-MySQL',
 1 => 'JavaScript',
 2 => 'HTML',
 3 => 'CSS',
 )
)

Web Development
JavaScript


• Formatul JSON este folosit in special in Aplicatii Web Development, precum Facebook App, Google Apps, Youtube Api.
Daca sirul cu date de la acel Appi nu este un format JSON corect, trebuie sa prelucrati sirul ca sa obtineti formatul JSON valid inainte de a utiliza json_decode().
De exemplu, datele "info" de la Youtube Api sunt intr-un sir cu obiect JSON, dar sirul in intregime nu este format JSON valid:
info = { "title" : "DaOne - povestea noastra (feat. Ewa)", "image" : "http://i.ytimg.com/vi/6UjfTKHQ4vo/default.jpg", "length" : "4", "status" : "serving", "progress_speed" : "", "progress" : "", "ads" : "", "pf" : "http://acef.u.aclst.com/ping.php?video_id=6UjfTKHQ4vo&h=2717", "h" : "a148abf7ef86bab307d50d0d9d6177f0" };
Iata cum se pot prelua datele din acest sir.
<?php
// sir cu date de la Youtube App
$yinfo = 'info = {
 "title" : "DaOne - povestea noastra (feat. Ewa)",
 "image" : "http://i.ytimg.com/vi/6UjfTKHQ4vo/default.jpg",
 "length" : "4",
 "status" : "serving",
 "progress_speed" : "",
 "progress" : "",
 "ads" : "",
 "pf" : "http://acef.u.aclst.com/ping.php?video_id=6UjfTKHQ4vo&h=2717",
 "h" : "a148abf7ef86bab307d50d0d9d6177f0"
};';

/*
 Se poate prelua acest sir de la pagina Youtube Api folosind acest cod:
 $url = 'http://www.youtube-mp3.org/api/itemInfo/?video_id=6UjfTKHQ4vo&adloc=&r={{datetime}}';
 $yinfo = file_get_contents($url);
*/

// preia doar subsirul cu formatul JSON valid
if(preg_match('/{(.*?)}/i', $yinfo, $infojson)) {
 // converteste obiectul JSON in array asociativ
 $arrjson = json_decode($infojson[0], true);

 // afisaza datele de la 'title' si 'image'
 $title = $arrjson['title'];
 $imgsrc = $arrjson['image'];

 echo $title .'<br/>'. $imgsrc;
}

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Ce tag se foloseste pentru a adauga liste in elemente <ul> si <ol>?
<dt> <dd> <li>
<ul>
 <li>http://coursesweb.net/html/</li>
 <li>http://www.marplo.net/html/</li>
</ul>
Care valoare a proprietatii "display" seteaza elementul ca tip bloc si afiseaza un punct in fata?
block list-item inline-block
.some_class {
  display: list-item;
}
Care instructiune JavaScript transforma un obiect in sir JSON.
JSON.parse() JSON.stringify eval()
var obj = {
 "courses": ["php", "javascript", "ajax"]
};
var jsonstr = JSON.stringify(obj);
alert(jsonstr);    // {"courses":["php","javascript","ajax"]}
Indicati clasa PHP folosita pentru a lucra cu elemente HTML si XML in PHP.
stdClass PDO DOMDocument
$strhtml = '<body><div id="dv1">CoursesWeb.net</div></body>';
$dochtml = new DOMDocument();
$dochtml->loadHTML($strhtml);
$elm = $dochtml->getElementById("dv1");
echo $elm->nodeValue;    // CoursesWeb.net
Indicati forma de Prezent Continuu a verbului "to live" (a trai /a locui)
lived living liveing
I`m living here.
- Traiesc /Locuiesc aici.
Care este forma de Gerunziu (sau Participiu Prezent) a verbului "vivir" (a trai /a locui)?
vivió vivido viviendo
Estoy viviendo aquí.
- Traiesc /Locuiesc aici.
Preluare date dintr-un sir cu obiect JSON

Last accessed pages

  1. Sufixele -ful, -less si -ness - ful, less and ness suffixes (17756)
  2. Operatori in JavaScript (8133)
  3. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (269930)
  4. Prezentul simplu si continuu - Present Tense Simple and Continuous (148237)
  5. Tipuri de siruri si variabile (3495)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (969)
  2. Gramatica limbii engleze - Prezentare Generala (630)
  3. Exercitii engleza - English Tests and exercises - Grammar (559)
  4. Prezentul simplu si continuu - Present Tense Simple and Continuous (458)
  5. Coduri pt culori (367)