Viac na
Čo je JSON a prečo by som ho mal používať?
Pozeral som sa na wikipédiu, googlil som a čítal oficiálnu dokumentáciu, ale stále som sa nedostal do bodu, kedy by som skutočne pochopil, čo je JSON a prečo by som ho mal používať.
Už nejaký čas vytváram aplikácie pomocou PHP, MySQL a Javascriptu/HTML a ak mi JSON môže uľahčiť život, zlepšiť kód alebo používateľské rozhranie, rád by som o tom vedel. Môže mi to niekto stručne vysvetliť?
524
3
JSON (JavaScript Object Notation) je odľahčený formát, ktorý sa používa na výmenu dát. Je založený na podmnožine jazyka JavaScript (spôsob, akým sú objekty v JavaScripte vytvorené). Ako sa uvádza v MDN, niektoré jazyky JavaScript nie sú JSON a niektoré JSON nie sú JavaScript. Príkladom, kde sa to používa, sú odpovede webových služieb. V 'starých' časoch webové služby používali XML ako primárny dátový formát na prenos spätných údajov, ale odkedy sa objavil JSON (Formát JSON je špecifikovaný v RFC 4627 Douglasa Crockforda), je to preferovaný formát, pretože je oveľa ľahší Mnoho ďalších informácií nájdete na oficiálnej webovej stránke JSON. JSON je postavený na dvoch štruktúrach:
Usporiadaný zoznam hodnôt. Vo väčšine jazykov sa realizuje ako pole, vektor, zoznam alebo sekvencia.
Štruktúra JSON
Tu je príklad údajov JSON:
JSON v jazyku JavaScript
JSON (v Javascripte) je reťazec! Ľudia často predpokladajú, že všetky objekty v Javascripte sú JSON a že JSON je objekt v Javascripte. To je nesprávne. V Javascripte
var x = {x:y}
nie je jazyk JSON, ale objekt Javascriptu. Tieto dve veci nie sú totožné. Ekvivalent JSON (reprezentovaný v jazyku Javascript) by bolvar x = '{"x":"y"}'
.x
je objekt typu string, nie samostatný objekt. Ak ho chcete premeniť na plnohodnotný objekt Javascriptu, musíte ho najprv analyzovať,var x = JSON.parse('{"x":"y"}');
,x
je teraz objekt, ale už to nie je JSON. Pozri Javascript object Vs JSONPri práci s JSON a JavaScriptom môžete byť v pokušení použiť funkciu
eval
na vyhodnotenie výsledku vráteného v spätnom volaní, ale to sa neodporúča, pretože existujú dva znaky (U+2028 & U+2029) platné v JSON, ale nie v JavaScripte (viac o tom tu). Preto sa treba vždy pokúsiť použiť Crockfordov'skript, ktorý pred vyhodnotením skontroluje, či je JSON platný. Odkaz na vysvetlenie skriptu nájdete tu a tu je priamy odkaz na súbor js. Každý hlavný prehliadač má v súčasnosti svoju vlastnú implementáciu pre túto funkciu. Príklad použitia analyzátora JSON (s json z vyššie uvedeného úryvku kódu):Parser JSON ponúka aj ďalšiu veľmi užitočnú metódu
stringify
. Táto metóda prijíma ako parameter objekt JavaScript a ako výstup vráti reťazec vo formáte JSON. To je užitočné, keď chcete odoslať údaje späť na server:Dve vyššie uvedené metódy (
parse
astringify
) prijímajú aj druhý parameter, ktorým je funkcia, ktorá bude volaná pre každý kľúč a hodnotu na každej úrovni konečného výsledku a každá hodnota bude nahradená výsledkom vami zadanej funkcie. (Viac o tom tu) Btw, pre všetkých, ktorí si myslia, že JSON je len pre JavaScript, pozrite si tento príspevok, ktorý vysvetľuje a potvrdzuje opak.Odkazy
JSON je JavaScript Object Notation. V porovnaní s XML je to oveľa kompaktnejší spôsob prenosu súborov údajov cez sieťové spojenia. Navrhujem, aby sa JSON používal vo všetkých aplikáciách podobných AJAXu, kde by sa inak odporúčala možnosť XML. Rozsiahlosť XML predĺži čas sťahovania a zvýši spotrebu šírky pásma ($$$). Rovnaký efekt môžete dosiahnuť pomocou JSON a jeho značkovanie sa venuje takmer výlučne samotným údajom a nie základnej štruktúre.
bežná krátka odpoveď je: ak používate AJAX na zadávanie požiadaviek na údaje, môžete jednoducho odosielať a vracať objekty ako reťazce JSON. Dostupné rozšírenia pre Javascript podporujú volania toJSON() na všetkých typoch javascriptov na odosielanie údajov na server v požiadavke AJAX. Odpovede AJAX môžu vracať objekty ako reťazce JSON, ktoré možno previesť na objekty Javascript jednoduchým volaním eval, napr. ak funkcia AJAX someAjaxFunctionCallReturningJson vrátila
mohli by ste v jazyku Javascript napísať
JSON sa môže použiť aj pre payload webových služieb a podobne, ale je naozaj vhodný pre výsledky AJAX.