Bylo nebylo. Mezi různými aplikacemi bylo zapotřebí vyměňovat data. I vymysleli iMudrci jazyk XML. Byl to však jazyk nejazyk, formát neformát. Naštěstí se po dlouhé době přešlapování v XML bahně začal používat JavaScript Object Notation, neboli JSON a produktivita bastlířů se rázem řádově znásobila. (Pro státní instituce samozřejmě ponecháme XML, protože co není na pohled komplikované, je nutně podezřelé a když je něco ve státní sféře hotové moc rychle, je to ještě podezřelejší a problematické co do vyúčtování milionů za pár řádek kódu.)
Jak s JSON pracovat? Snadno, kluci (a holky), snadno … JSON jsou relativně dobře čitelná data (narozdíl od XML). Níže je ukázka. Vždy máme párové informace „klíč“: „hodnota“ oddělené dvojtečkou a jednotlivé páry oddělené čárkou. Hodnota může být řetězec, boolean, číslo, null, pole nebo objekt. Uzavíráme je do { } závorek.
1 2 3 4 5 |
{ "id": 25, "name": "Tamara", "username": "tmr007" } |
Samotná JSON data jsou vždy řetězec. To je velká výhoda. Obdržíte-li JSON data, můžete je snadno v jakémkoliv jazyce přežvýkat. Ukážeme si jak.
Protože jde o řetězec, rovnou jej přiřadíme proměnné
1 2 3 4 5 |
$data = '{ "id": 25, "name": "Tamara", "username": "tmr007" }'; |
a zkonvertujeme obsah proměnné na PHP objekt
1 |
$prezvykano = json_decode($data); |
Obsah objektu můžeme vyobrazit skládkovým příkazem nebo tiskařským příkazem:
1 2 |
var_dump($prezvykano); print_r($prezvykano); |
Vyskočí na nás například
1 2 3 4 |
<small>string</small> <span style="color: #cc0000;">'{ "id": 25, "name": "Tamara", "username": "tmr007" }'</span> <i>(length=52)</i> a { "id": 25, "name": "Tamara", "username": "tmr007" } |
Skládkový příkaz bývá kupodivu přehlednější, ale může v nánosech dat v závislosti na nastavení php.ini něco skrývat třemi tečkami … .
Pokud není nastaveno přehledné zobrazování, můžete si výstup trochu zpřehlednit přidáním <pre></pre>, tzn.:
1 2 3 |
echo '<pre>'; var_dump($prezvykano); echo '</pre>'; |
Print_r zobrazí vše, ale jako na skládce.
A teď pozor! K jednotlivým položkám objektu přistupujeme objektově takto
1 |
echo $prezvykano->name; |
Příkaz vypíše jméno Tamara.
1 2 3 4 5 |
$data = '[{ "id": 25, "name": "Tamara", "username": "tmr007" },{ "id": 50, "name": "Hermiona", "username": "bubu" },{ "id": 75, "name": "Magda", "username": "majda" }]'; $prezvykano = json_decode($data); //var_dump($data); print_r($data); echo $prezvykano[1]->name; |
Povšimněte si prosím, že jednotlivé uživatelky a jejich propriety zavíráme do { } závorek a oddělujeme čárkou. Nesmíte však zapomenout i na hranaté závorky [ ] pro uzavření celého JSON řetězce.
Které jméno vyplivne echo $prezvykano[1]->name; ?
Určitě ne Tamara, jak by si mohl leckdo myslet, ale Hermiona, protože programátoři začínají od nuly přece!
Načítání dat se však provádí většinou z různých jiných zdrojů, například z webových stránek nebo ze souboru, ne tak jak je to zjednodušeno v ukázce. Většinou musíme iterovat přes pole dat. Například chceme vypsat všechny uživatelky, ne jenom Tamaru.
Použili bychom např. curl nebo file_get_contents
1 2 |
$zdroj = 'data.json'; $uzivatelky = file_get_contents($zdroj); |
Nejčastěji budete používat příkaz foreach
1 2 3 4 |
foreach ($uzivatelky as $uzivatelka) { echo $uzivatelka->name; echo '<br>'; } |
Z monitoru vyleze
Tamara
Hermiona
Magda
Pořád však pracujeme s pohádkově jednoduchými daty. V reálných aplikacích se vyskytují vnořené řetězce. Jak přistupovat ke vnořeným datů?
Na ukázce níže jsou data ve formátu JSON, která bychom získali načtením přes REST API WooCommerce (é-šopácký plugin do WordPressu):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
$data ='[{ "id": 25, "date_created": "2017-03-21T16:09:28", "date_created_gmt": "2017-03-21T19:09:28", "date_modified": "2017-03-21T16:09:30", "date_modified_gmt": "2017-03-21T19:09:30", "email": "john.doe@example.com", "first_name": "John", "last_name": "Doe", "role": "customer", "username": "john.doe", "billing": { "first_name": "John", "last_name": "Doe", "company": "", "address_1": "969 Market", "address_2": "", "city": "San Francisco", "state": "CA", "postcode": "94103", "country": "US", "email": "john.doe@example.com", "phone": "(555) 555-5555" }, "shipping": { "first_name": "John", "last_name": "Doe", "company": "", "address_1": "969 Market", "address_2": "", "city": "San Francisco", "state": "CA", "postcode": "94103", "country": "US" }, "is_paying_customer": false, "orders_count": 0, "total_spent": "0.00", "avatar_url": "https://secure.gravatar.com/avatar/8eb1b522f60d11fa897de1dc6351b7e8?s=96", "meta_data": [], "_links": { "self": [ { "href": "https://example.com/wp-json/wc/v2/customers/25" } ], "collection": [ { "href": "https://example.com/wp-json/wc/v2/customers" } ] } }]'; $shopdata = json_decode($data); |
Pomocí funkce json_decode jsme data převedli na PHP objekt.
Už víme jak načíst například id: $shopdata->id
Jak ale načíst jméno a příjmení zákazníka?
1 |
$jmeno_prijmeni = $shopdata->billing->first_name .' '. $shopdata->billing->last_name; |
Není to tedy nic těžkého. Jenom je pak horší vyznat se v tom všem při načítání dat pomocí foreach. Stačí však mít kvalitní pracovní prostředí bez rušících vlivů a nenechat se odradit tím, že nevíte jak přesně postupovat. Pracujte systematicky krok za krokem a zvládnete cokoliv.
Jak to bylo dál, se dozvíte na stránce www.taniarascia.com/how-to-use-json-data-with-php-or-javascript/