Saugiai įjunkite JSON eilutę į objektą

Atsižvelgiant į JSON duomenų eilutę, kaip galite saugiai paversti šią eilutę į „JavaScript“ objektą?

Akivaizdu, kad galite tai padaryti nesaugiai su kažkuo panašiu ...

 var obj = eval("(" + json + ')'); 

... bet tai palieka mums pažeidžiamas json linijos, kurioje yra kitas kodas, kuris atrodo labai pavojingas paprastam evalui.

1158
05 сент. Matt Sheppard rinkinys 05.09. 2008-09-05 03:12 '08 3:12 am. 2008-09-05 03:12
@ 26 atsakymai

JSON.parse(jsonString) yra švarus požiūris į „JavaScript“, jei galite garantuoti pakankamai modernią naršyklę.

1755 m
Atsakymą pateikė Jonathanas. 16 bal 2011-04-16 14:45 '11, 14:45, 2011-04-16 14:45

Dabar „JQuery“ metodas yra pasenęs. Vietoj to, naudokite šį metodą:

 let jsonObject = JSON.parse(jsonString); 

Pirminis atsakymas naudojant pasenusią jQuery funkciją:

border=0

Jei naudojate jQuery, naudokite:

 jQuery.parseJSON( jsonString ); 

Būtent tai jūs ieškote (žr. JQuery dokumentaciją ).

862
02 сент. Atsakymas pateikiamas Alex V 02 Sep. 2010-09-02 17:07 '10, 17:07, 2010-09-02 17:07

Pakeisti: šis atsakymas yra skirtas IE <7, šiuolaikinėms naršyklėms patikrinkite pirmiau pateiktą Jonathan atsakymą.

Keisti: šis atsakymas yra pasenęs, o Jonathanas atsakė aukščiau ( JSON.parse(jsonString) ) dabar yra geriausias atsakymas .

JSON.org turi JSON analizę daugeliu kalbų, įskaitant 4 skirtingus „Javascript“. Manau, kad dauguma žmonių apsvarstys json2.js jų įgyvendinimą.

143
05 сент. atsakymas, pateiktas Jono 05 rugsėjo mėn 2008-09-05 03:13 '08 at 3:13 2008-09-05 03:13

Naudokite paprastą kodą, pateiktą šioje MSDN nuorodoje .

 var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}'; var contact = JSON.parse(jsontext); 

ir atvirkščiai

 var str = JSON.stringify(arr); 
63
16 дек. Atsakymą pateikė Ronaldas 16 d. 2013-12-16 02:26 '13, 02:26 2013-12-16 02:26

Nesu tikras, kaip tai padaryti, bet tai, kaip jūs tai darote „ Prototype“ (JSON pamoka) .

 new Ajax.Request('/some_url', { method:'get', requestHeaders: {Accept: 'application/json'}, onSuccess: function(transport){ var json = transport.responseText.evalJSON(true); } }); 

Skambinkite evalJSON () tiesa, nes argumentas dezinfekuoja įvesties eilutę.

19
05 сент. Atsakymas, kurį pateikė Mark Biek Sep 05 2008-09-05 03:13 '08 at 3:13 2008-09-05 03:13

Atrodo, kad tai yra problema:

Įvestis gaunama per ajax websocket ir tt, ir ji visada bus eilutės formatu, tačiau jums reikia žinoti, ar tai yra JSON.parsable. „Touble“ yra tai, kad, jei visada jį paleisite per JSON.parse, programa „MAY“ gali tęsti „sėkmingai“, bet vis tiek matysite klaidą, kuri buvo įdėta į konsolę su baisu „Klaida: netikėtas simbolis“ x.

 var data; try { data = JSON.parse(jqxhr.responseText); } catch (_error) {} data || (data = { message: 'Server error, please retry' }); 
16
29 апр. atsakymą pateikė „ Cody“ balandžio 29 d. 2013-04-29 10:37 '13, 10:37 2013-14-29 10:37

Jei naudojate jQuery , taip pat galite tiesiog padaryti $.getJSON(url, function(data) { });

Tada galite atlikti tokius dalykus kaip data.key1.something , data.key1.something_else ir tt

12
24 окт. Leanano atsakymas spalio 24 d 2008-10-24 16:57 '08 at 4:57 2008-10-24 16:57
 $.ajax({ url: url, dataType: 'json', data: data, success: callback }); 

Grįžtamąjį ryšį grąžina grąžinti duomenys, kurie bus objektas arba „JavaScript“ masyvas, kaip apibrėžta JSON struktūroje, ir analizuojami naudojant $.parseJSON() metodą.

11
06 мая '10 в 9:23 2010-05-06 09:23 atsakymas pateikiamas Prahlad gegužės 06 d., 10 d., 9:23 val. 2010-05-06 09:23

Tiesiog įdomus, kaip naudotis šia funkcija:

  jsonObject = (new Function('return ' + jsonFormatData))() 
10
15 окт. Atsakymas duotas mažiau 15 mėn. 2014-10-15 11:11 '14 11:11 2014-10-15 11:11

Pabandykite naudoti šį duomenų objektą. ex: Data='{result:true,count:1} '

 try { eval('var obj=' + Data); console.log(obj.count); } catch(e) { console.log(e.message); } 

Šis metodas tikrai padeda „Nodejs“, kai dirbate su nuosekliojo prievado programavimu.

9
15 июля '14 в 21:53 2014-07-15 21:53 atsakymą pateikė GPrathap liepos 15 d. 14:53 2014-07-15 21:53

Lengviausias būdas naudoti parse() metodą:

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

tada galite gauti „ Json elementų reikšmes, pavyzdžiui:

 var myResponseResult = JsonObject.result; var myResponseCount = JsonObject.count; 

Naudojant jQuery, kaip aprašyta dokumentuose

 JSON.parse(jsonString); 
7
20 февр. Atsakymą pateikė Jorgesys vasario 20 d. 2016-02-20 04:00 '16 at 4:00 2016-02-20 04:00

Aš kurį laiką sėkmingai naudoju json_sans_eval . Pasak jo autoriaus, jis yra saugesnis nei json2.js.

6
07 дек. Atsakymas pateikiamas teleclimber. 2010-12-07 01:34 '10 ne 1:34 2010-12-07 01:34

JSON.parse naudojimas tikriausiai yra geriausias būdas. Čia pateikiamas pavyzdinis demonstravimas

 var jsonRes = '{ "students" : [' + '{ "firstName":"Michel" , "lastName":"John" ,"age":18},' + '{ "firstName":"Richard" , "lastName":"Joe","age":20 },' + '{ "firstName":"James" , "lastName":"Henry","age":15 } ]}'; var studentObject = JSON.parse(jsonRes); 
6
22 апр. Atsakymą pateikė Bharath Kumaar balandžio 22 d 2015-04-22 12:40 '15, 12:40, 2015-04-22 12:40

Radau geriausią būdą:

„CoffeeScript“:

 try data = JSON.parse(jqxhr.responseText) data ||= { message: 'Server error, please retry' } 

„Javascript“:

 var data; try { data = JSON.parse(jqxhr.responseText); } catch (_error) {} data || (data = { message: 'Server error, please retry' }); 
4
18 февр. Atsakymas duotas Dorianui 18 vas. 2015-02-18 16:38 '15 - 16:38 2015-02-18 16:38

Jėzų analizavimas visada yra asilas. Jei įvestis neatitinka lūkesčių, tai suteikia klaidą ir nesėkmę, ką darote. Saugiai analizuoti įvestį galite naudoti šią mažą funkciją. Jis visada sukasi objektą, net jei įėjimas yra netinkamas arba jau yra objektas, kuris daugeliu atvejų yra geresnis.

 JSON.safeParse = function (input, def) { // Convert null to empty object if (!input) { return def || {}; } else if (Object.prototype.toString.call(input) === '[object Object]') { return input; } try { return JSON.parse(input); } catch (e) { return def || {}; } }; 
2
14 февр. Atsakymas pateikiamas Tahsin Turkoz 14 vasaris. 2017-02-14 23:47 '17 at 11:47 2017-02-14 23:47

Objekto konvertavimas į JSON ir tada jį analizuojant, veikia man, pavyzdžiui:

 JSON.parse(JSON.stringify(object)) 
2
19 июня '17 в 19:28 2017-06-19 19:28 Atsakymą pateikė Liuver Reynier Durán Pérez , birželio 19 d., 17 val.
 JSON.parse(jsonString); 

json.parse pakeis objektą.

2
19 дек. Atsakymas duotas Shekhar Tyagi gruodžio 19 d. 2016-12-19 16:05 '16, 16:05 pm 2016-12-19 16:05

Oficialiai dokumentuota :

JSON.parse() metodas JSON.parse() JSON eilutę, JSON.parse() reikšmę arba „JavaScript“ objektą, aprašytą eilutėje. Norėdami atlikti konversiją rezultato objektui, papildoma reviver funkcija gali būti suteikta prieš jo reviver .

Sintaksė

 JSON.parse(text[, reviver]) 

parametrus

tekstą

Straipsnis, skirtas analizuoti kaip JSON. Žr. JSON objektą JSON sintaksės aprašymui.

reviver (neprivaloma)

Jei ji nurodo funkciją, kaip pradžioje sukurta reikšmė perskaičiuojama prieš grąžinant.

Grąžinimo vertė

Objektas, atitinkantis šį JSON tekstą.

Išimtys

Išskiria „SyntaxError“ išimtį, jei eilutė, kuri analizuoja, nėra tinkama JSON.

1
20 дек. Atsakymą pateikė Salomon Zhang . 2017-12-20 04:47 '17 at 4:47 2017-12-20 04:47

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

Jei norite geriau suprasti, paspauskite F12, kad atidarytumėte naršyklės funkciją „Patikrinti elementą“ ir eikite į konsolę, kad parašytumėte šias komandas: -

 var response = '{"result":true,"count":1}'; //sample json object(string form) JSON.parse(response); //converts passed string to 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, kuris leidžia pasakyti obj: -

 var obj = JSON.parse(response); 

Naudodami obj ir dot (.) Operatorių, galite pasiekti JSON objekto savybes.

Išbandykite komandą

 console.log(obj.result); 
1
03 дек. Pushkar Kathuria atsakymas 03.12. 2016-12-03 18:32 '16 at 18:32 2016-12-03 18:32

Vyresnis klausimas, aš žinau, bet niekas nepastebi šio sprendimo naudojant new Function() , anoniminę funkciją, kuri grąžina duomenis.


Tik pavyzdys:

  var oData = 'test1:"This is my object",test2:"This is my object"'; if( typeof oData !== 'object' ) try { oData = (new Function('return {'+oData+'};'))(); } catch(e) { oData=false; } if( typeof oData !== 'object' ) { alert( 'Error in code' ); } else { alert( oData.test1 ); alert( oData.test2 ); } 

Tai šiek tiek saugesnė, nes ji atlieka funkciją ir nėra tiesiogiai sukompiliuota jūsų kode. Todėl, jei jame yra funkcijų deklaracija, ji nebus susieta su numatytuoju >

Naudoju tai „kompiliuoju“ DOM elemento konfigūracijos parametrus (pvz., Duomenų atributą) paprasta ir greita.

0
19 февр. atsakymas pateikiamas „ Codebeat“ vasario 19 d 2018-02-19 04:27 '18 at 4:27 2018-02-19 04:27

JS Guru Douglasas Crockfordas parašė parseJSON funkciją, kurią atsisiunčiate čia

0
05 сент. atsakymas pateiktas Manu 05 Sep 2008-09-05 03:47 '08 at 3:47 2008-09-05 03:47

Santrauka:

„Javascript“ (ir naršyklė, ir „NodeJS“) turi integruotą JSON objektą. Šiame objekte yra du patogūs darbo su JSON metodai. Jie yra tokie:

  1. JSON.parse() Priima JSON kaip argumentą, grąžina JS objektą.
  2. JSON.stringify() Priima JS objektą, nes argumentas grąžina JSON objektą

Kitos programos:

Be to, norint patogiai naudoti JSON jie gali būti naudojami kitomis priemonėmis. Dėl abiejų JSON metodų derinio mums labai lengva gaminti masyvų ar objektų klonus. Pavyzdžiui:

JSON.parse 

0
26 июля '17 в 11:58 2017-07-26 11:58 Atsakymą pateikė Durgpal Singh liepos 17 d. 17 val. 11:58 2017-07-26 11:58

Padalinkite „Json“ eilutę su JSON.parse (), o duomenys taps „JavaScript“ objektu.

 JSON.parse(jsonString) 

Čia JSON yra „Json“ duomenų rinkinio apdorojimas.

Pavyzdys. Įsivaizduokite, kad gavome šį tekstą iš žiniatinklio serverio:

 '{ "name":"John", "age":30, "city":"New York"}' 

Analizuoti „Json“ objektą:

 var obj = JSON.parse('{ "name":"John", "age":30, "city":"New York"}'); 

Čia obj yra atitinkamas JSON objektas, kuris atrodo taip.

 { "name":"John", "age":30, "city":"New York"} 

Norėdami pasirinkti vertę, kurią norite naudoti. operatorius Pavyzdys:

 obj.name // John obj.age //30 

Norėdami pereiti priešingai, konvertuoti „JavaScript“ objektą į eilutę naudodami JSON.stringify ().

0
13 авг. Atsakymas duotas Amitesh 13 rug . 2018-08-13 05:33 '18 at 5:33 2018-08-13 05:33

Išbandykite. Šis tekstas rašomas mašinoje.

  export function safeJsonParse(str: string) { try { return JSON.parse(str); } catch (e) { return str; } } 
0
30 мая '18 в 9:31 2018-05-30 09:31 atsakė Supun Dharmarathnei gegužės 30 d., 18 val., 9:31, 2018-05-30 09:31

Jei jūsų „JavaScript“ yra „ Mootools“, „ JSON.parse bus naudojama anonimiškai, naudodamiesi sistema.
Teisinga sintaksė, skirta saugiai keisti JSON eilutę į objektą, turėtų būti:

 var object = JSON.decode(string[, secure]); 

Be to, JSON Request gali paimti objektą, kuris gali apdoroti tiesiogiai.
Čia galite išsiaiškinti, kaip atlikti šiuos „Json“ neapdorotus duomenis :

http://jsfiddle.net/chetabahana/qbx9b5pm/

-1
11 мая '18 в 22:27 2018-05-11 22:27 atsakymą pateikė Chetabahana gegužės 11 d., 18 val., 22:27, 2018-05-11 22:27

Kiti klausimai apie „ žymes arba klausimo pateikimas