Během prozkoumávání funkcí API od SEOmoz jsem se seznámil s výborným způsobem přenosu informací mezi dvěma subjekty. V mém případě šlo o skript schopný zpracovat výsledky na základě odpovědi, kterou získal od serveru. Řešení se označuje jako JSON, což znamená JavaScript Object Notation. Neznamená to však, že by údaje bylo možno zpracovat pouze s pomocí JavaScriptu, spíše je tomu naopak. Já jsem využil PHP, JSON však podporují i jiné jazyky. A čím vlastně popisovaný formát uchování dat vyniká? Jde o schopnost přenášet nejen řetězce, ale rovnou celé objekty či pole. Populární CSV se dle mého názoru na tento úkol příliš nehodí, jeho doménu symbolizují spíše údaje z databáze či tabulky. Výsledek po konverzi přitom získá formu běžného řetězce. Vypadat může například takto:
{"fmrp":3.31508823980473,"fmrr":8.71399339003802e-10,"pda":29.96283221096798,"ueid":42,"ufq":"szj.cz/","uid":120,"umrp":3.851694829321838,"umrr":3.447144837370461e-11,"upa":37.82389310886856,"upl":"szj.cz/","us":200,"ut":"szj.cz | internet, novinky, linux, programování","uu":"szj.cz/"}
Obrovskou výhodu přitom představuje možnost přečíst jednotlivé složky bez nutnosti jakékoliv předchozí programové úpravy. Stačí proto jediný pohled a ihned získáte ponětí o tom, s jakými informace máte tu čest.
Další JSON vlastnosti
Začal jsem se o celou problematiku blíže zajímat a záhy jsem zjistil, že při používání JSON se musí dbát pouze na jedinou věc. V samotném zápisu nenaleznete údaj nesoucí použité kódování. To znamená, že jej programátor musí jasně specifikovat. Pakliže tak učiněno není, s největší pravděpodobností půjde o UTF-8. Toto kódování se totiž považuje za výchozí.
Zpracování v PHP
Když jsem již otázku převodu dat zpět do použitelné podoby musel vyřešit, určitě nezaškodí, když předvedu mnou aplikovaný postup v případě PHP. Nejde přitom o nic složitého, stačí použít vhodnou funkci. Ta se jmenuje json_decode a jako první parametr očekává vstupní data. Ovlivnit rovněž lze, zda jako výstup dostaneme objekt nebo asociativní pole. Rozhodl jsem se pro druhou variantu, a proto na místě druhého parametru vidíte true.
echo var_dump(json_decode($json, true));
array(13) { ["fmrp"]=> float(3.3150882398047) ["fmrr"]=> float(8.713993390038E-10) ["pda"]=> float(29.962832210968) ["ueid"]=> int(42) ["ufq"]=> string(7) "szj.cz/" ["uid"]=> int(120) ["umrp"]=> float(3.8516948293218) ["umrr"]=> float(3.4471448373705E-11) ["upa"]=> float(37.823893108869) ["upl"]=> string(7) "szj.cz/" ["us"]=> int(200) ["ut"]=> string(49) "szj.cz | internet, novinky, linux, programování" ["uu"]=> string(7) "szj.cz/" }
K samotným údajům se poté pohodlně dostaneme přes patřičný index.
$pole = json_decode($json, true); echo $pole["fmrp"];
//Výpis 3.31508823980473