Pogledal sem na wikipedijo, jo poguglal in prebral uradno dokumentacijo, vendar še vedno nisem prišel do točke, ko bi zares razumel, kaj je JSON in zakaj bi ga uporabljal.
Že nekaj časa gradim aplikacije s PHP, MySQL in Javascriptom / HTML, in če mi JSON lahko olajša življenje, izboljša mojo kodo ali uporabniški vmesnik, potem bi rad vedel za to. Ali mi lahko kdo poda kratko razlago?
JSON (JavaScript Object Notation) je lahek format, ki se uporablja za izmenjavo podatkov. Temelji na podmnožini jezika JavaScript (način gradnje objektov v jeziku JavaScript). Kot je zapisano v MDN]1, nekateri jeziki JavaScript niso JSON in nekateri JSON niso JavaScript. Primer uporabe tega so odgovori spletnih storitev. V 'starih' časih so spletne storitve uporabljale XML kot primarni podatkovni format za prenos podatkov nazaj, odkar pa se je pojavil JSON (Format JSON je določen v RFC 4627 Douglasa Crockforda), je to prednostni format, ker je veliko bolj lahek. Veliko več informacij najdete na uradni spletni strani JSON. JSON temelji na dveh strukturah:
{
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": 10021
},
"phoneNumbers": [
"212 555-1234",
"646 555-4567"
]
}
var x = {x:y}
ni to ni JSON, ampak je objekt Javascripta. Ne gre za isto stvar. Ekvivalent JSON (predstavljen v jeziku Javascript) bi bil var x = '{"x":"y"}'
. x
je objekt tipa string in ne samostojen objekt. Da bi to spremenili v polnopravni objekt Javascript, ga morate najprej razčleniti, var x = JSON.parse('{"x":"y"}');
, x
je zdaj objekt, vendar to ni več JSON.
Glej Javascript object Vs JSONPri delu z JSON in Javascriptom vas morda mika, da bi za ovrednotenje rezultata, vrnjenega v povratnem klicu, uporabili funkcijo eval
, vendar to ni priporočljivo, saj obstajata dva znaka (U+2028 & U+2029), ki sta veljavna v JSON, ne pa tudi v JavaScript (več o tem tukaj).
Zato je treba vedno poskusiti uporabiti Crockfordovo skripto, ki pred vrednotenjem preveri, ali je JSON veljaven. Povezavo do razlage skripte najdete tukaj, tukaj pa je neposredna povezava do datoteke js. Vsak večji brskalnik ima danes lastno implementacijo za to.
Primer uporabe razčlenjevalnika JSON (z json iz zgornjega odlomka kode):
//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'
};
Razčlenjevalnik JSON ponuja še eno zelo uporabno metodo, stringify
. Ta metoda sprejme objekt JavaScript kot parameter in izpiše nazaj niz v formatu JSON. To je uporabno, kadar želite poslati podatke nazaj v strežnik:
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}
parse
in stringify
) sprejmeta tudi drugi parameter, ki je funkcija, ki bo poklicana za vsak ključ in vrednost na vsaki ravni končnega rezultata, vsaka vrednost pa bo nadomeščena z rezultatom vaše vnesene funkcije. (Več o tem tukaj)
Za vse, ki menite, da je JSON samo za JavaScript, si oglejte ta prispevek, ki pojasnjuje in potrjuje nasprotno.JSON je objektni zapis v jeziku JavaScript. V primerjavi z XML je to veliko bolj kompakten način prenosa nizov podatkov prek omrežnih povezav. Predlagam, da se JSON uporablja v vseh aplikacijah, podobnih AJAX-u, kjer bi bila sicer priporočljiva možnost XML. Razvejanost XML bo podaljšala čas prenosa in povečala porabo pasovne širine ($$$). Enak učinek lahko dosežete z JSON, pri čemer je označevanje skoraj izključno namenjeno samim podatkom in ne osnovni strukturi.
splošni kratek odgovor je: če uporabljate AJAX za podatkovne zahteve, lahko preprosto pošljete in vrnete predmete kot nize JSON. Razpoložljive razširitve za Javascript podpirajo klice toJSON() na vseh vrstah javascript za pošiljanje podatkov strežniku v zahtevi AJAX. Odgovori AJAX lahko vrnejo predmete kot nize JSON, ki jih je mogoče pretvoriti v predmete Javascript s preprostim klicem eval, npr. če funkcija AJAX someAjaxFunctionCallReturningJson vrne
"{ \"FirstName\" : \"Fred\", \"LastName\" : \"Flintstone\" }"
lahko v Javascript zapišete
var obj = eval("(" + someAjaxFunctionCallReturningJson().value + ")");
alert(obj.FirstName);
alert(obj.LastName);
JSON se lahko uporablja tudi za tovor spletnih storitev in podobno, vendar je zelo priročen za rezultate AJAX.