7.04. JSON adatstruktúra

Az alábbi oldalon előkészítjük az AJAX hívásokkal kapcsolatos fogalmakat.

Tömbök

A javascriptben használhatunk tömböket, amelyekkel hasonló műveleteket lehet végezni:

var t = [első elem , második elem, harmadik, elem, ......]; // tömb deklarációja. Az első elem indexe 0 lesz.
document.write( t[3] ); //A 4. elem, azaz a 3-as indexű elem kiiratása

//Egy tömb összes elemének kiiratása
for(var i=0; i<t.length; i++){
    document.write( t[i] +"<br>");
}

//Alternatív deklaráció egy tömbre
var tt = [0:"első elem", 1:"második elem", 2: "harmadik elem", ....];

//Egy tömb összes elemének kiiratása visszafelé
for(var i=tt.length; i>-1 ; i--){
    document.write( t[ti] +"<br>");
}

Két dimenziós és több dimenziós tömbök is léteznek, de ez most nem

var aktivitasok  = [
    ['Dolgozik', 9],
    ['Eszik', 1],
    ['Játszik', 2],
    ['Alszik', 8]
];

A tömbökben tárolt adatok típusa keverhető pl. a C# ellenében!

Objektumok

Valójában a tömbök is objektumok, mivel a javascriptben minden objektum...

// Létrehozunk egy objektumot, amelynek az elemei egy személyt azonosítanak
var szemely = {
  nev: "péter",
  szulido: "1961.09.18",
  anyjaneve: "Bimbó Mária"
}

//A jQuery képes egy objektum minden egyes elemén végigmenni.
//Az alábbi példa a fenti objektum minden elemét kiírja
jQuery.each( function(index, value) {
   document.write( index +": " +value+"<br>" );
});

Fontos string műveletek

Egy stringet hasonlóan más programozási nyelvekhez - szét tudunk darabolni egy bizonyos karaktersorozat mentén

var str = "Gipsz Jakab,1961.09.18, Piripócsi Márta";
var t = str.split(",");    //szétdaraboljuk a ',' mentén a stringet és betesszük egy tömbbe:

//Kiiratjuk az adatokat
for(var i=0;i<t.length; i++){
    document.write(t[i]+"<br>");
}

A fenti kód használható az alábbi módon AJAX hívásoknál: Talán ez a legegyszerűbb mód, hogy adatokat kapjak vissza és dolgozzak fel a kliens oldalon javascriptben. egyszerű, de nem a legjobb mód.

A legritkább esetben kell az adatokat olyan sorrendben feldolgozni, ahogyan a szerver oldalról visszaérkeznek, ráadásul különböző speciális jelek visszaadásával is lehetnek gondok.

JSON adatstruktúra

Az interneten átküldendő adatok korrekt kezeléséhez a W3C konzorcium kidolgozta a JSON szabványt, amely szabványosan kezeli az interneten átküldött mindenféle információt a karakterkészletek és a speciális karakterek szempontjából. Ha ezzel a szabvánnyal oldjuk meg egy kliens és egy szerver oldal közötti kommunikációt, akkor biztosak lehetünk, hogy a különböző kódlapok, karakterkészletek nem fognak bezavarni a kommunikációba.

Mivel a szerver és a kliens oldal között végső soron a kommunikáció mindig stringek formájában zajlik, ezért a javascript képes előállítani megfelelő formátumú stringekből objektumot vagy tömböt és objektumból vagy tömbből előállít megfelelő formátumú stringet.

Ha a szerver oldalról kapunk egy ilyen jellegű stringet, akkor az alábbi módon tudjuk konvertálni az objektummá:

JSON.parse(string);

//A string úgy né ki, mintha objektum volna, pedig csak egy string...
var str = '{"nev":"Pista", "eletkor":30, "varos":"Piripcstarcsa"}'
var obj = JSON.parse (str);

//Ha a stzring úgy néz ki, mintha egy tömb értékei lennének, akkor a JSON tömböt állít elő
var str1 = '["Pista", "Géza", "Mari"]';
var a = JSON.parse(str1);

Mivel ilyenkor egy utasítással át tudjuk konvertálni a stringet megfelelő adattípussá, ezért a programozó válláról le tudjuk venni a konverzió terhét és az adatszerkezetek is biztosan jók lesznek.

JSON.stringify(obj);

Ha egy objektumot vagy tömböt szeretnénk konvertálni stringgé, akkor az alábbi utasítást lehet használni.

Megjegyzés:

  • A javascript az utolsó pár évben nem csak böngésző, hanem szerver oldali programozási nyelvvé is vált, ezért a kommunikációban az objektum => string átalakítás is fontos.

  • A szerver oldalon gyakran PHP kód vagy .Net kód áll, ezért fontos, hgy az az oldal is képes legyen kezelni a JSON adatstuktúrát

JSON a PHP kódban

Bár ez most nem PHP gyorstalpaló, de a JSON-nal kapcsolatos PHP tudnivalókat összefoglalom:

Ha van egy tömbünk a PHP-ban, akkor azt így deklaráljuk:

//ez egy szimpla tömb
$t = ["Pista", "Géza", "Mari", "Juci"];

//Ez egy asszociatív tömb, ami leginkább egy objektumra hasonlít
$tt = ["nev"=> "Pista", "szulido" =>"1961.09.18", "anyjaneve"=> "Piripócsi Kis Mariska", "lakik"=>"Piripócstarcsa"];

//létrejön egy JSON string, amit vissza lehet küldeni a kliensnek
$json = json_encode($tt);

//Ha kapunk a kliens oldalról egy JSON stringet, akkor pedig így lesz belőle asszociatív tömb.
// Megjegyzés:
//     A $_REQUEST tömb tartalmaz minden $_GET és $_POSt értéket, 
//     tehát a kliens bármelyik szabvány szerint küldi az adatot az ebben a szuperglobális 
//     tömbben megjelenik
$str = $_REQUEST['par'];

//A $p változó már egy asszociatív tömb (objektum) lesz
$p = json_decode($str);