Norėčiau pakalbėti apie piliečio Javos Skripto sūnų - Džeisoną. O jeigu šiek tiek rimčiau, tai norėčiau pakalbėti apie JSON - JavaScript Object Notation. Kas tai yra? Su kuo jis valgomas? Tai gerai ar blogai? Ar jis mums reikalingas? Ar tikrai jis mums reikalingas?
JSON - tekstinis, žmogui suprantamas duomenų formatas atvaizduojantis duomenų struktūras ir asociatyvius masyvus. JSON dažniausiai naudojamas Ajax perduoti duomenims ir yra naudojamas kaip XML alternatyva.
Pats paprasčiausias pavyzdys:
{ "vardas": "Dzeisonas", "adresas": { "gatve": "Geliu 3 - 5", "miestas": "Nida", "salis": "Lietuva", }, "telefonas": [ "8 65 55001", "8 55 23991" ] }
Ką mes matome? JSON viduje gali būti atvaizduoti paprasti kintamieji, asociatyvus masyvas, paprastas masyvas.
Įsitikinimui, jog JSON yra labiau skaitomas ir paprastesnis nei XML pateiksiu analogišką informaciją XML formatu.
<pagrindinis> <vardas>Dzeisonas</vardas> <adresas> <gatve>Geliu 3 - 5</gatve> <miestas>Nida</miestas> <salis>Lietuva</salis> </adresas> <telefonas>8 65 55001</telefonas> <telefonas>8 55 23991</telefonas> </pagrindinis>
Na kaip ar matosi, jog JSON lengviau skaityti ir jis užima daug mažiau vietos? Nelabai? Pabandykite palyginti su 3x kartų daugiau duomenų.
Nors pateiktame pavyzdyje visi duomenys yra eilutės tipo, tačiau JSON palaiko ir daugiau kintamųjų tipų: eilutės(string), skaičiai(integer, real), loginės reikšmės(true, false), masyvai(buvo pavyzdyje), objektai(buvo pavyzdyje), NULL.
Kaip apdoroti duomenis gautus tokiu formatu? Tam naudojama eval() funkcija.
var kitamasis = eval("(" + JSON_tekstas + ")");
Taip apdoroję duomenis prie jų galime prieiti kintamasis.vardas, kintamasis.adresas.salis kintamasis.telefonas[0].
Viskas labai šaunu ir atrodo labai paprasta. Ar tikrai? Laikas pakalbėti apie trūkumus.
Aš iš karto pastebėjau, jog man kažko trūksta. Norit atspėti ko? Datos bei laiko formatų. Kadangi esu naujokas man labai įdomu kaip iš tokios padėties sukasi naudojantys JSON? Naudoja eilutės tipo kintamuosius ar datos iš viso nenaudoja?
Kitas aspektas yra saugumas. Kadangi galima paduoti bet ką, tai kodėl gi nepadavus kokios nors funkcijos? Aišku, ta funkcija turėtų būti protingesnė nei tiesiog alert(). Viena iš problemų su kuria gali susidurti naudojantys JSON, tai XSS(ang. cross site scripting). Javascript turi tokią blogą savybę gautą kodą iš karto įvykdyti, todėl niekada negali būti tikras ką gausi iš JSON. Kita problema CSRF(ang. Cross Site Request Fogery), lietuviškai tai reikštų duomenų vagystės, JSON nėra labai saugus ir bet kas gali išparsinti ir pamatyti duomenų turinį, tam net nereikia labai sudėtingų įrankių ar žinių, užtenka Firefox ir keleto standartinių svetainės kūrėjų įskiepių. Daugiau nesiplėsiu saugumo problemų klausimais, paskaitykite nuorodas pateiktas straipsnio pabaigoje.
Apibendrinant, JSON yra labai paprastas ir suprantamas formatas, lengvai realizuojamas programavime. Jeigu jums svarbus perduodamos informacijos dydis, tai jis turi privalumų prieš XML. Vis tik prieš naudojant JSON rekomenduočiau pasidomėti saugumo klausimais.
Daugiau pasiskaityti galite:
Wikipedia
Oficialeme puslapyje
JSON, AJAX, & PHP
JSON AJAX Web Chat
Mastering JSON
JSON for the masses
JSON is not as safe as people think it is
Look Ma, Cross-Domain Scripting!
2008-03-06 | 16:01
“Kita problema CSRF(ang. Cross Site Request Fogery), lietuviškai tai reikštų duomenų vagystės, JSON nėra labai saugus ir bet kas gali išparsinti ir pamatyti duomenų turinį, tam net nereikia labai sudėtingų įrankių ar žinių, užtenka Firefox ir keleto standartinių svetainės kūrėjų įskiepių.”
O XML šiuo atžvilgiu saugus?
2008-03-06 | 23:18
XML srityje egzistuoja standartai, nurodantys kaip užšifruoti (encrypt) ir pasirašyti (sign) XML dokumentą. Tačiau abejoju ar tai yra naudojama paprastame web development’e (HTML + JS). Ar bendrai įmanoma panaudoti. Būtų įdomu sužinoti jei kasnors kažką žinote.
2008-03-07 | 0:11
JSON - tai Džeisonas, o kodėl Java - ne Džiava?
2008-03-07 | 12:42
O kame problema. Įdedį puslapį į https ir ir siusk norį JSON, nori XML o nori raudona kepuraitę su piragaitėmis tik CSRF čia nieko dėtas nes vogia dažniausiai cookies o ne JSON/XML duomenis
2008-03-10 | 0:25
ejik: Siaip java yra vadinama Džiava…JAVA bet ne javascript ;)
2008-03-10 | 13:37
Butu visai nieko, jei siek tiek daugiau + ir - butu pavardinta lyginant JSON su XML. (perskaiciau tik kad glaustesnis rezultatas gaunasi)
Jei kas ismano parasykit ;-) Galiu pradeti pirmas (skaites labai nedaug, tad noretusi daugiau suzinoti):
+XML Schema.
2008-06-08 | 21:51
Su JS frameworkais (kiek maciau JQuery tikrai) saugumo sumetiamais galima apriboti JSON naudojima tik localhost’ui. T.y. skriptas tikrina ar duomenys gaunami is to paties serverio. Aisku, su apsikeitimu tarp keliu serveriu - sunkiau… reikia paciam “meistrauti” ;)