Jak na práci s JSON

Publikováno JavaScript, PHP

Pokud vidíte zkratku JSON (JavaScript Object Notation – JavaScriptový objektový zápis), vězte, že dle Wikipedie se jedná o:

„… způsob zápisu dat (datový formát) nezávislý na počítačové platformě, určený pro přenos dat, která mohou být organizována v polích nebo agregována objektech.“

Jedním z primárních účelů JSONu na webové stránce je přenos dat ze serveru (PHP) ke klientovi (JavaScript). Hlavně tedy při komunikaci přes AJAX.

Použitím JSONu si ušetříte spoustu práce s vytvářením nějakého parseru, navíc je práce s ním velmi elegantní.

JSON v PHP

Zde je to celkem jednoduché. Od verze 5.2 jsou funkce pro práci s JSON přímo integrované a není potřeba žádné rozšíření.

$names[0] = Array(
    'jmeno' => 'Michal',
    'prijmeni' => 'Novák'
);
$names[1] = Array(
    'jmeno' => 'Pavel',
    'prijmeni' => 'Dvořák'
);
$names[3] = Array(
    'jmeno' => 'Martin',
    'prijmeni' => 'Černý',
    'adresa' => Array (
        'ulice'=>'Pražská 25',
        'mesto'=>'Praha'
        ),
);

    // Vytvoření JSON stringu - [{"jmeno":"Michal","prijmeni":"Novák"},{"jmeno":"Pavel","prijmeni":"Dvořák"},{"jmeno":"Martin","prijmeni":"Černý","adresa":{"ulice":"Pražská 25","mesto":"Praha"}}]
$json_string = json_encode ($names);

    // Získání dat z JSON stringu
$data = json_decode ($json_string);

    // Vypíše se "Pražská 25"
echo $data[2]->adresa->ulice; 

JSON v JavaScriptu

Zde už to tak jednoduché nebude. Tedy vlastně ano bude, ale pouze v moderních prohlížečích, pro ty starší IE7, Firefox 3 a další prehistorické prohlížeče musíte vytvořit (nebo použít) vlastni funkci, která z JavaScriptového objektu vytvoří string.

Pro dekódování lze použít místo

var data = JSON.parse(jsonString)

funkci eval (vždyť syntaxe JSONu vychází z JavaScriptu):

var data = eval("(" + jsonString + ")");

Zde uvedu pouze ukázku pro moderní prohlížeče:

var names = new Array();
names[0] = {};
names[0].jmeno = 'Michal';
names[0].prijmeni = 'Novák';

names[1] = {};
names[1]['jmeno'] = 'Pavel';
names[1]['prijmeni'] = 'Dvořák';

names[2] = {};
names[2].jmeno = 'Martin';
names[2].prijmeni = 'Černý';
names[2].adresa = {};
names[2].adresa.ulice = 'Pražská 25';
names[2].adresa.mesto = 'Praha';
                                           
    // Vytvoření JSON stringu - [{"jmeno":"Michal","prijmeni":"Novák"},{"jmeno":"Pavel","prijmeni":"Dvořák"},{"jmeno":"Martin","prijmeni":"Černý","adresa":{"ulice":"Pražská 25","mesto":"Praha"}}]
var json_string = JSON.stringify(names);

    // Získání dat z JSON stringu
var data = JSON.parse(json_string);
 
    // Vypíše se "Pražská 25"
alert( data[2].adresa.ulice );

Komentáře