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

 

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

Google       22. 3. 2010       45 145×

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 Dovozci baterií mění logistiku, letadlo nahrazuje námořní doprava

Dovozci baterií mění logistiku, letadlo nahrazuje námořní doprava

Dovozci baterií do mobilů či notebooků upouštějí od letecké přepravy zboží. V letošním roce plánují dovézt až 80 % produktů lodí. Přitom před 5 lety byla většina baterií do mobilních přístrojů dovezených do České republiky přepravována letadlem. Za proměnou způsobu transportu akumulátorů stojí zpřísnění pravidel pro leteckou přepravu, která přinášejí vyšší náklady i náročnou agendu.

Reklama
Reklama
Obrázek ke článku JIC otevírá největší digitální dílnu pro veřejnost v České republice

JIC otevírá největší digitální dílnu pro veřejnost v České republice

JIC otevírá první nonstop veřejně dostupnou digitální dílnu světového formátu s vybavením za 3 miliony korun. Dílnu může využívat po registraci kdokoliv. V  prostorách vzniknou prototypy produktů místních startupů, projekty kutilů a studentů i umělecká díla. Cílem dílny je zpřístupnit veřejnosti drahé přístroje a přitáhnout více podnikavých lidí k technickým oborům.

Obrázek ke článku Nový IT hráč na českém trhu

Nový IT hráč na českém trhu

V roce 2015 otevřela v Praze na Pankráci v budově City Tower své kanceláře společnost EPAM Systems (NYSE:EPAM), jejíž centrála se nachází v USA. Společnost byla založená v roce 1993 a od té doby prošla velkým vývojem a stále roste.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032017 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý