Kas yra JSON ir kodėl turėčiau jį naudoti?

Žiūrėjau į Vikipediją ir "Google" ir perskaičiau oficialią dokumentaciją, bet vis dar nesupratau, kas yra JSON ir kodėl jį naudoju.

Jau kurį laiką kuriu taikomąsias programas naudodamas PHP, MySQL ir Javascript / HTML, ir jei JSON gali kažkuo palengvinti mano gyvenimą, patobulinti mano kodą arba vartotojo sąsają, norėčiau apie tai sužinoti. Ar kas nors galėtų man pateikti glaustą paaiškinimą?

Sprendimas

JSON (JavaScript Object Notation) - tai lengvas formatas, naudojamas duomenų mainams. Jis pagrįstas "JavaScript" kalbos poaibiu (objektų kūrimo būdu "JavaScript"). Kaip teigiama MDN, kai kurie JavaScript nėra JSON, o kai kurie JSON nėra JavaScript. Pavyzdys, kur tai naudojama, yra žiniatinklio paslaugų atsakymai. 'senaisiais' laikais žiniatinklio paslaugos naudojo XML kaip pagrindinį duomenų formatą atgaliniams duomenims perduoti, tačiau nuo tada, kai atsirado JSON (*JSON formatas nurodytas Douglaso Crockfordo RFC 4627), jam teikiama pirmenybė, nes jis yra daug lengvesnis**. Daugiau informacijos galite rasti oficialioje JSON interneto svetainėje. JSON remiasi dviem struktūromis:

  • Vardų ir verčių porų rinkinys. Įvairiose kalbose tai suprantama kaip objektas, įrašas, struktūra, žodynas, hash lentelė, sąrašas su raktais arba asociatyvusis masyvas.
  • Sutvarkytas verčių sąrašas. Daugumoje kalbų jis realizuojamas kaip masyvas, vektorius, sąrašas arba seka.

    JSON struktūra













    Čia pateikiamas JSON duomenų pavyzdys:

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

JSON JavaScript kalba

JSON (Javascript kalba) yra eilutė! Žmonės dažnai mano, kad visi "Javascript" objektai yra JSON ir kad JSON yra "Javascript" objektas. Tai neteisinga. Javascript sistemoje var x = {x:y} yra ne JSON, tai yra Javaskripto objektas. Šie du dalykai nėra tapatūs. JSON atitikmuo (išreikštas Javascript kalba) būtų var x = '{"x":"y"}'. x yra string tipo objektas, o ne savarankiškas objektas. Norėdami paversti šį objektą visaverčiu Javascript objektu, pirmiausia turite jį išnarplioti, var x = JSON.parse('{"x":"y"}');, x dabar yra objektas, bet tai jau ne JSON. Žr. Javascript object Vs JSON

Dirbant su JSON ir "JavaScript", gali kilti pagunda naudoti funkciją eval grįžtamojo ryšio grąžinamam rezultatui įvertinti, tačiau to daryti nesiūloma, nes yra du simboliai (U+2028 & amp; U+2029), galiojantys JSON, bet ne "JavaScript" (daugiau apie tai skaitykite čia). Todėl visada reikia stengtis naudoti Crockford'o scenarijų, kuris prieš įvertindamas JSON patikrina, ar JSON yra galiojantis. Nuorodą į scenarijaus paaiškinimą rasite čia, o čia yra tiesioginė nuoroda į js failą. Šiais laikais kiekviena pagrindinė naršyklė turi savą šio veiksmo realizaciją. Pavyzdys, kaip naudoti JSON analizatorių (su json iš pirmiau pateiktos kodo ištraukos):

//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'
};

JSON analizatorius taip pat siūlo dar vieną labai naudingą metodą stringify. Šis metodas priima "JavaScript" objektą kaip parametrą ir išveda JSON formato eilutę. Tai naudinga, kai norite siųsti duomenis atgal į 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}

Du pirmiau minėti metodai (parse ir stringify) taip pat priima antrąjį parametrą, kuris yra funkcija, kuri bus iškviesta kiekvienam raktui ir vertei kiekviename galutinio rezultato lygyje, ir kiekviena vertė bus pakeista jūsų įvestos funkcijos rezultatu. (Daugiau apie tai čia) Btw, visiems, kurie mano, kad JSON skirtas tik "JavaScript", perskaitykite šį įrašą, kuriame paaiškinama ir patvirtinama priešingai.

Nuorodos

Komentarai (9)

JSON yra "JavaScript Object Notation". Tai daug kompaktiškesnis būdas perduoti duomenų rinkinius tinklo ryšiais, palyginti su XML. Siūlau JSON naudoti visose į AJAX panašiose programose, kuriose XML būtų rekomenduojamas variantas. Dėl XML žodžių gausos pailgės atsisiuntimo laikas ir padidės duomenų srauto pralaidumo sąnaudos ($$$). Tokį patį efektą galite pasiekti naudodami JSON, o jo žymėjimas beveik išimtinai skirtas tik patiems duomenims, o ne pagrindinei struktūrai.

Komentarai (0)

bendras trumpas atsakymas: jei duomenų užklausoms atlikti naudojate AJAX, galite lengvai siųsti ir grąžinti objektus kaip JSON eilutes. Turimi "Javascript" plėtiniai palaiko visų tipų "JavaScript" skambučius toJSON(), skirtus duomenims siųsti į serverį AJAX užklausoje. AJAX atsakymai gali grąžinti objektus kaip JSON eilutes, kurias galima konvertuoti į "Javascript" objektus paprastu "eval" iškvietimu, pvz., jei AJAX funkcija someAjaxFunctionCallReturningJson grąžino

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

galite parašyti Javascript

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

JSON taip pat gali būti naudojamas žiniatinklio paslaugų apkrovoms ir t. t., tačiau jis tikrai patogus AJAX rezultatams.

  • Atnaujinimas (po dešimties metų): Nedarykite to, naudokite JSON.parse
Komentarai (2)