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 - Object Notation. Kas tai yra? Su kuo jis valgomas? Tai gerai ar blogai? Ar jis mums reikalingas? Ar tikrai jis mums reikalingas?

- tekstinis, žmogui suprantamas duomenų formatas atvaizduojantis duomenų struktūras ir asociatyvius masyvus. dažniausiai naudojamas perduoti duomenims ir yra naudojamas kaip 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? viduje gali būti atvaizduoti paprasti kintamieji, asociatyvus masyvas, paprastas masyvas.

Įsitikinimui, jog yra labiau skaitomas ir paprastesnis nei pateiksiu analogišką informaciją 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 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 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 ? 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 , tai XSS(ang. cross site scripting). turi tokią blogą savybę gautą kodą iš karto įvykdyti, todėl niekada negali būti tikras ką gausi iš . Kita problema CSRF(ang. Cross Site Request Fogery), lietuviškai tai reikštų duomenų vagystės, 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, yra labai paprastas ir suprantamas formatas, lengvai realizuojamas programavime. Jeigu jums svarbus perduodamos informacijos dydis, tai jis turi privalumų prieš . Vis tik prieš naudojant 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!

Panašūs straipsniai


“Džeisonas - Javos Skripto sūnus.” komentarų: 7

  1. neworld

    “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?

  2. Paulius

    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.

  3. ejik

    JSON - tai Džeisonas, o kodėl Java - ne Džiava?

  4. Sergej Andrejev

    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

  5. Prasalaitis

    ejik: Siaip java yra vadinama Džiava…JAVA bet ne javascript ;)

  6. danas

    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.

  7. seip

    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” ;)

Rašyti komentarą

Jūs privalote prisijungti jeigu norite rašyti komentarą.