Č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ť?

Riešenie

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:

  • Kolekcia dvojíc meno/hodnota. V rôznych jazykoch sa realizuje ako objekt, záznam, štruktúra, slovník, hašovacia tabuľka, kľúčovaný zoznam alebo asociatívne pole.
  • 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:

{
     "firstName": "John",
     "lastName": "Smith",
     "address": {
         "streetAddress": "21 2nd Street",
         "city": "New York",
         "state": "NY",
         "postalCode": 10021
     },
     "phoneNumbers": [
         "212 555-1234",
         "646 555-4567"
     ]
 }

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 bol var 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 JSON

Pri 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):

//The callback function that will be executed once data is received from the server
var callback = function (result) {
    var johnny = JSON.parse(result);
    //Now, the variable 'johnny' is an object that contains all of the properties 
    //from the above code snippet (the json example)
    alert(johnny.firstName + ' ' + johnny.lastName); //Will alert 'John Smith'
};

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:

var anObject = {name: "Andreas", surname : "Grech", age : 20};
var jsonFormat = JSON.stringify(anObject);
//The above method will output this: {"name":"Andreas","surname":"Grech","age":20}

Dve vyššie uvedené metódy (parse a stringify) 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

Komentáre (9)

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.

Komentáre (0)

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

"{ \"FirstName\" : \"Fred\", \"LastName\" : \"Flintstone\" }"

mohli by ste v jazyku Javascript napísať

var obj = eval("(" + someAjaxFunctionCallReturningJson().value + ")");
alert(obj.FirstName);
alert(obj.LastName);

JSON sa môže použiť aj pre payload webových služieb a podobne, ale je naozaj vhodný pre výsledky AJAX.

  • Aktualizácia (o desať rokov neskôr): Používajte JSON.parse
Komentáre (2)