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

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

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

Google       22. 3. 2010       49 388×

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 NopCommerce – dervisní vrstva – 3. díl

NopCommerce – dervisní vrstva – 3. díl

V minulém díle jsme se podívali trochu podrobněji na datovou vrstvu systému NopCommerce. V dnešním díle navážeme na předchozí znalosti, aby se naše pochopení systému zase o něco víc prohloubilo. Zaměříme se na dvě důležité oblasti a to Nop.Core projekt, který udržuje nejen doménu, ale obsahuje i infrastrukturní prvky. Dále se podíváme na projekt Nop.Service, který obsahuje obchodní logiku.

Reklama
Reklama
Obrázek ke článku První český hackathon ve vlaku inspirovaly služby jako  Tinder, Airbnb nebo Uber

První český hackathon ve vlaku inspirovaly služby jako Tinder, Airbnb nebo Uber

Patnáct set kilometrů, cesta přes dva státy, šestnáct hodin programování a přísun energy drinků, tak by se dal shrnout unikátní hackathon ve vlaku pořádaný Kiwi.com. Z Prahy do Košic a zpět se svezlo celkem 13 týmů, každý s originálním nápadem. Hlavní výhru, voucher na letenky v hodnotě 2 500 EUR, si v Praze převzal tým až z Ukrajiny.

Obrázek ke článku Gamifikace nakupování dorazila i do České republiky

Gamifikace nakupování dorazila i do České republiky

Zákazníci zejména retailových společností jsou často znuděni klasickými věrnostními či motivačními programy. Většinou z toho důvodu, že jsou jeden jako druhý a nepřináší nic nového. Ale i v České republice se projevují zahraniční trendy, nedávno zde totiž vstoupila na trh a rychle se uchytila nová platforma kombinující to nejlepší z věrnostních a motivačních programů, která navíc využívá prvky gamifikace – Rondo.cz. Na hlavní milníky vývoje nálad a motivace zákazníků a nejnovější trendy se zaměřil Jan Hřebabecký, spoluzakladatel Rondo.cz

Celý článekGoogle2. listopadu 2017PR

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