javascript - Sikkert gjøre en JSON-streng om til et objekt
Gitt en streng med JSON-data, hvordan kan jeg trygt gjøre den strengen om til et JavaScript-objekt?
Åpenbart kan jeg gjøre dette på en usikker måte med noe som:
var obj = eval("(" + json + ')');
men det gjør meg sårbar for JSON-strengen som inneholder annen kode, noe som virker veldig farlig å bare evaluere.
Svar #1
JSON.parse(jsonString) er en ren JavaScript-tilnærming så lenge du kan garantere en rimelig moderne nettleser.
Svar #2
jQuery-metoden er nå foreldet. Bruk denne metoden i stedet:
let jsonObject = JSON.parse(jsonString);
Opprinnelig svar som bruker foreldet jQuery-funksjonalitet:
Hvis du bruker jQuery, bruk bare:
jQuery.parseJSON( jsonString );
Det er akkurat det du leter etter (se jQuery-dokumentasjonen).
Svar #3
Denne svaret er for IE < 7, for moderne nettlesere sjekk Jonathans svar ovenfor.
Denne besvarelsen er utdatert, og Jonathans svar ovenfor (JSON.parse(jsonString)) er nå det beste svaret.
JSON.org har JSON-parsere for mange språk, inkludert fire forskjellige for JavaScript. Jeg tror de fleste vil anse json2.js som deres foretrukne implementering.
Svar #4
Bruk det enkle kodeeksemplet i "JSON.parse()":
var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';
var contact = JSON.parse(jsontext);
og reversere det:
var str = JSON.stringify(arr);
Svar #5
Dette ser ut til å være problemet:
En inndata som mottas via Ajax, WebSocket osv., og den vil være i strengformat, men du trenger å vite om den er JSON.parsbar. Problemet er at hvis du alltid kjører den gjennom JSON.parse, kan programmet FORTSETTE «vellykket», men du vil fortsatt se en feil bli kastet i konsollen med den fryktede "Error: unexpected token 'x'".
var data;
try {
data = JSON.parse(jqxhr.responseText);
} catch (_error) {}
data || (data = {
message: 'Server error, please retry'
});
Svar #6
Jeg er ikke sikker på andre måter å gjøre det på, men her er hvordan du gjør det i Prototype (JSON-veiledning).
new Ajax.Request('/some_url', {
method:'get',
requestHeaders: {Accept: 'application/json'},
onSuccess: function(transport){
var json = transport.responseText.evalJSON(true);
}
});
Å kalle evalJSON() med true som argument renser den innkommende strengen.
Svar #7
Hvis du bruker jQuery, kan du også bruke:
$.getJSON(url, function(data) { });
Da kan du gjøre ting som
data.key1.something
data.key1.something_else
osv.
Svar #8
Bare for moro skyld, her er en måte som bruker en funksjon:
jsonObject = (new Function('return ' + jsonFormatData))()
Svar #9
Å bruke JSON.parse er sannsynligvis den beste måten.
Her er et eksempel
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);
Svar #10
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback
});
Tilbakeroppringingen får den returnerte dataen, som vil være et JavaScript-objekt eller en liste som definert av JSON-strukturen og analysert ved bruk av $.parseJSON()-metoden.
Svar #11
Den enkleste måten ved å bruke parse()-metoden:
var response = '{"result":true,"count":1}';
var JsonObject= JSON.parse(response);
Da kan du hente verdiene til JSON-elementene, for eksempel:
var myResponseResult = JsonObject.result;
var myResponseCount = JsonObject.count;
Bruke jQuery som beskrevet i jQuery.parseJSON()-dokumentasjonen:
JSON.parse(jsonString);
Svar #12
Prøv å bruke metoden med dette Data-objektet. eks:Data='{"result":true,"count":1}'
try {
eval('var obj=' + Data);
console.log(obj.count);
}
catch(e) {
console.log(e.message);
}
Denne metoden hjelper virkelig i Nodejs når du jobber med seriell port-programmering
