JSON: první kroky aneb používáme PHP a jQuery
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

JSON: první kroky aneb používáme PHP a jQueryJSON: první kroky aneb používáme PHP a jQuery

 
Hledat
Moderní platforma pro vytvoření vašeho nového webu – Wix.com.
Nyní už můžete mít web zdarma.
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno

JSON: první kroky aneb používáme PHP a jQuery

Google       22. 3. 2010       53 123×

Neznáte nebo se bojíte moderního formátu JSON? V článku vám ukážu, jak lze s JSON pracovat v PHP. Dozvíte se rozdíly oproti XML a uvidíte, jak využít jQuery pro zpracování předaných dat.

Reklama
Reklama

Co jsou XML a JSON?

Moderní způsoby, jak vyměňovat textová data. XML (Extensible Markup Language) je naprostý standard – tím teď nemyslím z pohledu specifikace, ale podle rozšířenosti. XML naleznete prakticky všude, kde se přenáší textová data.

JSON (JavaScript Object Notation) je oproti XML využívaný především moderními AJAX aplikacemi; vznikl jako odlehčená náhrada za XML. JSON využívají Twitter, Facebook, Delicious aj. Je schopný pojmout pole hodnot, objekty, řetězce a čísla, tedy prakticky bez jakéhokoliv omezení.

Hodnoty jsou uváděny v uvozovkách, data je proto nutné escapovat (escapování je běžné také u SQL dotazů).

Výhody a nevýhody JSON oproti XML

Hlavní výhoda JSON oproti XML je menší velikost přenášených dat. Uvádí se, že obsah XML je až ze 40 % tvořen značkami a atributy. U malých projektů menší traffic nepocítíte, u velkých ano. Následně se projeví v úspoře finančních prostředků.

A nevýhody? Za nevýhodu lze možná považovat nemožnost definovat znakovou sadu přenášeného obsahu, což samo o sobě ale nemusí být jako nevýhoda chápáno. Výchozí kódování je moderní UTF-8.

Jak vygenerovat JSON data v PHP?

Jednoduše. Vytvoříte pole s daty, které nakonec předáte jako parametr funkci json_encode(). Ta vrátí data v JSON formátu.

$ret = array();
$ret['stav'] = 0;
$ret['text'] = 'Musíš se přihlásit';
$ret['citat'] = '"Lépe pozdě, než nikdy."';
echo json_encode($ret);

Vypíše:

	{"stav":0,"text":"Mus\u00ed\u0161 se p\u0159ihl\u00e1sit","citat":"\"L\u00e9pe pozd\u011b, ne\u017e nikdy.\""}

Jak je vidět, escapování znaků json_encode() provádí automaticky.

Jak zpracovat JSON data v PHP?

Nyní naopak. Vygenerovaný JSON řetězec uložíme do proměnné a zpracujeme funkcí json_decode().

$json_string = '{"stav":0,"text":"Mus\u00ed\u0161 se p\u0159ihl\u00e1sit","citat":"\"L\u00e9pe pozd\u011b, ne\u017e nikdy.\""}';
$json = json_decode($json_string, true);

// array (
// 'stav' => 0,
// 'text' => 'Musíš se přihlásit',
// 'citat' => '"Lépe pozdě, než nikdy."',
// )
var_export($json);

echo $json['citat']; // "Lépe pozdě, než nikdy."

Jak zpracovat JSON data? (JavaScript)

Funkce eval() a bezpečnostní riziko

Protože formát JSON dat je „formát javascriptového objektu“, stačí zavolat funkci eval() a předat jí JSON data. Následně z dat vytvoří standardní javascriptové pole. Žádnou vědu v tom nehledejte.

Možnou nevýhodou je potenciální bezpečnostní riziko – eval() provede, co jí předáte. Pokud jí předáte nebezpečný kód, vykoná jej, neprovádí totiž kontrolu na platnost JSON dat (z logiky věci ani nemůže – nemá přímo s JSON vůbec nic společného).

Máte následující JSON řetězec (v xhr.responseText):

[1, 20, 30, alert('BAF')]

Předáte ho ke zpracování JSON:

var json = eval("(" + xhr.responseText + ")");

Vyskočí ale alert() okno s hláškou „BAF“, což je špatně. Pokud by byl řetězec alert('BAF') v uvozovkách, tento problém nenastane. Data vygenerovaná pomocí json_encode() uvozovky přidávají.

Řešením je v každém případě napřed ověřit platnost dat:

var my_JSON_object = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(
            text.replace(/"(\\.|[^"\\])*"/g, ''))) &&
     eval('(' + text + ')');

Příklad pochází z RFC4627.

Nativní podpora přímo v prohlížečích

Některé prohlížeče nabízejí nativní podporu formátu JSON, jsou to: Chrome 3+ (a Safari), Internet Explorer 8+, Firefox 3.5+ a Opera 10.5+

Zpracování přímo pomocí nativních funkcí je rychlé (a snad i rychlejší než eval()).

Podporu pro nativní JSON v prohlížečích nabízejí populární javascriptové frameworky Yahoo! UI Library, jQuery, Dojo Toolkit a Mootools.

Jak zpracovat JSON data pomocí jQuery? (JavaScript)

// v xhr.responseText máme JSON data
var ret = $.parseJSON(xhr.responseText);

alert(ret['citat']); // "Lépe pozdě, než nikdy."

Více na jQuery .parseJSON. Pokud pracujete s AJAX přes jQuery, můžete přímo využít jQuery.getJSON.

Jak bylo zmíněno výše, využívá nativní podporu JSON v prohlížečích – pakliže existuje. Jestli neexistuje, použije eval(), bohužel.

Jak vypsat všechna JSON data pomocí jQuery? (JavaScript)

// v xhr.responseText máme JSON data
var ret = $.parseJSON(xhr.responseText);

$.each(ret, function(key, value) {
  alert(key + ': ' + value);
});

Více na jQuery.each.

Jak zpracovat XML data pomocí jQuery? (JavaScript)

Jen na ukázku výpis citátu z XML dat:

// v xhr.responseXML máme XML data
var xml = xhr.responseXML;

alert($(xml).find("citat").text()); // "Lépe pozdě, než nikdy."

Pokud jste doposud o JSON neslyšeli, anebo se mu bránili, podívejte se na něj blíže. Jedná se o moderní formát, který stojí za prozkoumání.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

2 názory  —  2 nové  
Hlasování bylo ukončeno    
0 hlasů
Google
(fotka) Zdeněk VečeřaAutor publikuje na Programujte.com a Živě.cz, zabývá se vývojem a použitelností internetových aplikací a stará se o spokojenost návštěvníků Laser Game v Brně.
Web     Twitter     Facebook     LinkedIn    

Nové články

Obrázek ke článku Influenceři? Značce mohou pomoci, ale také ji poškodit

Influenceři? Značce mohou pomoci, ale také ji poškodit

Influenceři hýbou současným marketingem. Firmy do nich investují nemalé peníze v očekávání návratnosti. Správně nastavená spolupráce s influencerem může značce opravdu velmi pomoci, ale také naopak. Podmínkou je k tomu přistupovat s citem. Podle odborníků je stále diskutovaným tématem také přiznání spolupráce

Reklama
Reklama
Obrázek ke článku GoPay uvede automatické čtení údajů z dokladů, použije řešení studenta, který s ním uspěl v IT SPY

GoPay uvede automatické čtení údajů z dokladů, použije řešení studenta, který s ním uspěl v IT SPY

Vymyslet aplikaci, která pohodlně vyčte data z identifikačních dokladů, aby je jejich držitel nemusel složitě přepisovat. To byl jeden z prvních úkolů Miroslava Bartyzala, když nastoupil jako juniorský Java programátor do GoPay. Bartyzal nakonec projektu, který mu zabral více než 2200 hodin, věnoval svou diplomovou práci na Přírodovědecké fakultě Jihočeské univerzity.

Obrázek ke článku Studium MBA zvýší manažerům v IT hodnotu na trhu práce

Studium MBA zvýší manažerům v IT hodnotu na trhu práce

Investice do kvalitního vzdělání se vyplatí, a to jak v osobní, tak v profesionální rovině. Prestižní titul MBA otevře absolventům vysokoškolského studia cestu k mnoha atraktivním pracovním pozicím a potažmo i vyšším příjmům. Zvlášť, pokud dovedou nastudovanou teorii převést přímo do praxe a využít ji při komunikaci i řešení problémů.

Obrázek ke článku Co nám přinese technologický rok 2019? Podle Cisco bude směr určovat těchto 6 trendů

Co nám přinese technologický rok 2019? Podle Cisco bude směr určovat těchto 6 trendů

Kam se bude ubírat technologický vývoj? Společnost Cisco představila 6 trendů, které budou v příštím roce měnit svět a podobu moderních firem. Ty se v roce 2018 podle očekávání zaměřily na lepší využití dat, kterých dnes shromažďují velké objemy. Pro mnohé byla prioritou optimalizace a správa multicloudových prostředí, stejně jako snaha integrovat zabezpečení již na základní úrovni infrastruktury. Žádný z těchto trendů v příštím roce nejspíš nepomine. Přibudou ale další.

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032019 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý