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

Relaterte artikler