JSON analizavimas javascript'e?

Noriu analizuoti JSON eilutę javascript'e. Atsakymas yra kažkas panašaus

 var response = '{"result":true,"count":1}'; 

Kaip galiu gauti result ir count reikšmes?

1518
08 февр. nustatė user605334 08 Feb 2011-02-08 19:34 '11, 19:34, 2011-02-08 19:34
@ 16 atsakymų

Dauguma naršyklių palaiko JSON.parse() , kuris yra apibrėžtas ECMA-262 5-ame leidime (specifikacija, kurioje yra „JavaScript“). Jo naudojimas yra paprastas:

 var json = '{"result":true,"count":1}', obj = JSON.parse(json); alert(obj.count); 

Naršyklėms, kurių negalite įdiegti naudojant json2.js .

Kaip pažymėta komentaruose, jei jau naudojate jQuery, yra $.parseJSON funkcija, rodoma JSON.parse , jei yra, arba eval forma senesnėse naršyklėse. Tačiau tai atlieka papildomus nereikalingus patikrinimus, kurie taip pat atliekami naudojant „ JSON.parse , todėl geriausiam bendram našumui rekomenduoju jį naudoti taip:

 var json = '{"result":true,"count":1}', obj = JSON  JSON.parse(json) || $.parseJSON(json); 

Tai užtikrina, kad tuoj pat naudosite gimtoji JSON.parse , o ne jQuery, atliekančią JSON.parse patikrinimus linijoje prieš perduodant ją į gimtoji analizavimo funkciją.

1868 m
08 февр. Atsakymą pateikė Andy E 08 Feb. 2011-02-08 19:38 '11, 19:38, 2011-02-08 19:38

Visų pirma turite įsitikinti, kad JSON kodas yra galiojantis.

Po to rekomenduoju naudoti „JavaScript“ biblioteką, pvz., „JQuery“ arba „Prototype“, jei tai įmanoma, nes šie dalykai yra gerai tvarkomi šiose bibliotekose.

Kita vertus, jei nenorite naudoti bibliotekos, ir jūs galite garantuoti JSON objekto galiojimą, aš tiesiog apvyniu eilutę anonimine funkcija ir naudoju eval funkciją.

Tai nerekomenduojama, jei gavote JSON objektą iš kito šaltinio, kuris nėra visiškai patikimas, nes eval funkcija leidžia naudoti pakartotinio kodo naudojimą.

border=0

Čia pateikiamas pavyzdinės funkcijos pavyzdys:

 var strJSON = '{"result":true,"count":1}'; var objJSON = eval("(function(){return " + strJSON + ";})()"); alert(objJSON.result); alert(objJSON.count); 

Jei valdote, kuri naršyklė yra naudojama, arba jei žmonės, turintys seną naršyklę, nesivargina tavęs, visada galite naudoti JSON.parse metodą.

Tai tikrai puikus sprendimas ateityje.

91
08 февр. Atsakymą pateikė Clarence Fredericks 08 Feb. 2011-02-08 19:46 '11, 19:46, 2011-02-08 19:46

Jei jį gausite iš išorinės svetainės, gali būti naudinga naudoti jQuery getJSON. Jei tai yra sąrašas, galite jį pakartoti naudodami $ .each

 $.getJSON(url, function (json) { alert(json.result); $.each(json.list, function (i, fb) { alert(fb.result); }); }); 
49
19 июля '12 в 0:57 2012-07-19 00:57 atsakymas pateikiamas milicija, liepos 19 d., 12 val

Jei norite naudoti JSON 3 senesnėms naršyklėms, galite ją atsisiųsti sąlygiškai:

 <script> window.JSON || document.write('<script src="//cdnjs.cloudflare.com/ajax/libs/json3/3.2.4/json3.min.js"><\/scr'+'ipt>'); </script> 

Dabar jums prieinamas standartinis window.JSON objektas, nepriklausomai nuo to, kurioje naršyklėje klientas veikia.

32
19 апр. atsakymas duotas huwiler 19 Bal 2013-04-19 21:52 '13, 21:52 pm 2013-04-19 21:52

Šis pavyzdys bus aiškus:

 var jsontext = '{"name":"x","age":"11"}'; var getContact = JSON.parse(jsontext); document.write(getContact.name + ", " + getContact.age); // Output: x, 11 

Or

Taip pat galite naudoti eval funkciją. Toliau pateiktame pavyzdyje naudojama eval funkcija:

 var jsontext = '{"name":"x","age":"11"}'; var getContact = eval('(' + jsontext + ')'); document.write(getContact.name + ", " + getContact.age); // Output: x, 11 

Kadangi JSON.parse funkcija JSON.parse saugesnė ir greitesnė nei eval funkcija, rekomenduoju naudoti JSON.parse funkciją.

31
01 окт. Atsakymas pateikiamas Joke_Sense10 01 okt. 2013-10-01 10:42 '13, 10:42 2013-10-01 10:42

Galite naudoti eval funkciją, kaip ir kai kuriuos kitus atsakymus. (Nepamirškite papildomų skliaustų.) Išsiaiškinsite, kodėl, kai kasti giliau) arba tiesiog naudokite jQuery parseJSON funkciją:

 var response = '{"result":true , "count":1}'; var parsedJSON = $.parseJSON(response); 

Or

Šį kodą galite naudoti toliau.

 var response = '{"result":true , "count":1}'; var jsonObject = JSON.parse(response); 

Ir galite pasiekti laukus naudodami jsonObject.result ir jsonObject.count .

25
06 июня '13 в 6:51 2013-06-06 06:51 atsakymą pateikė Teja birželio 13 d. 13 d. 6:51 2013-06-06 06:51

Jei perduodate eilutės kintamąjį (gerai suformuotą JSON eilutę) į JSON.parse iš MVC @Viewbag, kuri turi dvigubą citatą, '' ', kaip citatos, turite ją apdoroti prieš JSON.parse ( jsonstring )

  var jsonstring = '@ViewBag.jsonstring'; jsonstring = jsonstring.replace(/ '"'); 
25
22 окт. Jenna Leaf atsakymas, pateiktas spalio 22 d 2014-10-22 18:06 '14 at 18:06 2014-10-22 18:06

Lengviausias būdas naudoti parse() metodą:

 var response = '{"a":true,"b":1}'; var JsonObject= JSON.parse(response); 

Tai pavyzdys, kaip gauti vertes:

 var myResponseResult = JsonObject.a; var myResponseCount = JsonObject.b; 
23
04 июня '15 в 17:44 2015-06-04 17:44 Atsakymą pateikė Jorgesys birželio 4 d. 15 d. 17:44 2015-06-04 17:44

Nenaudodami bibliotekos galite naudoti eval - vienintelį kartą, kai turėtumėte naudoti. Tačiau saugiau naudotis biblioteka.

pavyzdžiui ...

 var response = '{"result":true , "count":1}'; var parsedJSON = eval('('+response+')'); var result=parsedJSON.result; var count=parsedJSON.count; alert('result:'+result+' count:'+count); 
19
08 февр. Atsakymą pateikė El Ronnoco 08 vasaris. 2011-02-08 19:45 '11, 19:45, 2011-02-08 19:45

JSON.parse () konvertuoja JSON eilutę, perduotą funkcijai, į JSON objektą.

Norėdami geriau suprasti, paspauskite F12, kad atidarytumėte naršyklės elementą „Check“, ir eikite į konsolę, jei norite parašyti šias komandas:

 var response = '{"result":true,"count":1}'; // Sample JSON object (string form) JSON.parse(response); // Converts passed string to a JSON object. 

Dabar paleiskite komandą:

 console.log(JSON.parse(response)); 

Jūs gausite rezultatą kaip Objektas {rezultatas: tiesa, skaičius: 1}.

Jei norite naudoti šį objektą, galite priskirti jį kintamajam, tarkim, obj :

 var obj = JSON.parse(response); 

Dabar, naudodami obj ir dot operatorių (.), Galite pasiekti JSON objekto savybes.

Išbandykite komandą

 console.log(obj.result); 
19
18 февр. Pushkar Kathuria atsakymas vasario 18 d. 2015-02-18 13:08 '15 - 13:08 2015-02-18 13:08

Jei norite

 var response = '{"result":true,"count":1}'; var JsonObject= JSON.parse(response); 

Galite pasiekti JSON JsonObject elementus naudodami (.) Taškus:

 JsonObject.result; JsonObject.count; 
17
15 мая '15 в 8:42 2015-05-15 08:42 atsakymą pateikė vartotojo5676965418 gegužės 15, 15, 8:42 2015-05-15 08:42

Maniau, kad JSON.parse(myObject) veiks. Tačiau, priklausomai nuo naršyklių, gali būti verta naudoti eval('('+myObject+')') . Vienintelė problema, kurią galiu rekomenduoti, yra daugiapakopis sąrašas JSON.

11
04 апр. atsakymas pateikiamas ha9u63ar 04 balandžio. 2013-04-04 13:38 '13, 13:38, 2013-04-04 13:38

Paprastas būdas tai padaryti:

9
24 сент. Atsakymas suteiktas 24 sep . 2014-09-24 21:08 '14, 21:08 2014-09-24 21:08

Kaip minėjo daugelis kitų, dauguma naršyklių palaiko JSON.parse ir JSON.stringify .

Dabar taip pat norėčiau pridurti, kad jei naudojate „ AngularJS“ (kurį labai rekomenduoju), tai taip pat suteikia reikiamą funkcionalumą:

 var myJson = '{"result": true, "count": 1}'; var obj = angular.fromJson(myJson);//equivalent to JSON.parse(myJson) var backToJson = angular.toJson(obj);//equivalent to JSON.stringify(obj) 

Aš tik norėjau pridėti „AngularJS“ medžiagą, kad galėčiau pateikti kitą variantą. Atkreipkite dėmesį, kad „AngularJS“ oficialiai nepalaiko „Internet Explorer 8“ (ir senesnių versijų), nors dėl patirties dauguma medžiagos atrodo labai gerai veikiančios.

4
01 июля '14 в 20:51 2014-07-01 20:51 atsakymą pateikė vartotojo2359695 liepos 1 d. 14, 20:51 2014-07-01 20:51

Jei naudojate „ Dojo Toolkit“ :

 require(["dojo/json"], function(JSON){ JSON.parse('{"hello":"world"}', true); }); 
4
17 июля '14 в 23:09 2014-07-17 23:09 atsakymas pateikiamas Brendon-Van-Heyzen, liepos 17 d. 14, 23:09 2014-07-17 23:09

Jei naudojate jQuery, tai paprasta:

 var response = '{"result":true,"count":1}'; var obj = $.parseJSON(response); alert(obj.result); //true alert(obj.count); //1 
4
12 марта '14 в 12:33 2014-03-12 12:33 legendaJSLC atsakymas kovo 12 d., 14 val. 12:33 2014-03-12 12:33

Kiti klausimai, susiję su „ žymėmis, arba „ Užduoti klausimą“