[Javascript] Eine JSON-Zeichenfolge sicher in ein Objekt umwandeln


Answers

Die jQuery-Methode ist jetzt veraltet. Verwenden Sie stattdessen diese Methode:

let jsonObject = JSON.parse(jsonString);

Ursprüngliche Antwort mit veralteter jQuery-Funktionalität :

Wenn Sie jQuery verwenden, verwenden Sie einfach:

jQuery.parseJSON( jsonString );

Es ist genau das, wonach Sie suchen (siehe die jQuery- documentation ).

Question

Wie können Sie diese Zeichenfolge anhand einer Zeichenfolge aus JSON-Daten sicher in ein JavaScript-Objekt umwandeln?

Natürlich können Sie das mit etwas unsicherem ...

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

... aber das macht uns anfällig für die JSON-Zeichenkette, die anderen Code enthält, was sehr einfach erscheint.




Dies scheint das Problem zu sein:

Eine Eingabe wird empfangen, über Ajax Websocket etc, und es wird immer im String-Format sein - aber Sie müssen wissen, ob es JSON.parsable ist. Touble ist, dass, wenn Sie es immer durch eine JSON.parse ausführen, das Programm weiterhin 'erfolgreich', aber Sie werden immer noch einen Fehler in der Konsole mit der gefürchteten "Fehler: unerwartete Token 'x'" angezeigt.

var data;

try {
  data = JSON.parse(jqxhr.responseText);
} catch (_error) {}

data || (data = {
  message: 'Server error, please retry'
});



Offiziell dokumentiert :

Die JSON.parse() -Methode analysiert eine JSON-Zeichenfolge und erstellt den JavaScript-Wert oder das Objekt, das von der Zeichenfolge beschrieben wird. Eine optionale reviver Funktion kann bereitgestellt werden, um eine Transformation für das resultierende Objekt durchzuführen, bevor es zurückgegeben wird.

Syntax

JSON.parse(text[, reviver])

Parameter

Text

Die Zeichenfolge, die als JSON analysiert werden soll. Im JSON-Objekt finden Sie eine Beschreibung der JSON-Syntax.

Beleben (optional)

Wenn es sich um eine Funktion handelt, schreibt diese vor, wie der ursprünglich vom Parsen erzeugte Wert transformiert wird, bevor er zurückgegeben wird.

Rückgabewert

Das Objekt, das dem angegebenen JSON-Text entspricht.

Ausnahmen

Es wird eine SyntaxError-Ausnahme ausgelöst, wenn die zu analysierende Zeichenfolge nicht JSON ist.




Wenn Sie möchten, dass diese Methode auf diese Weise verwendet werden kann. Hier Datenobjekt, das Sie wollen: Data = '{result: true, count: 1}'

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

Diese Methode hilft wirklich in Nodejs Wenn Sie mit der Programmierung von seriellen Ports arbeiten




Verwenden Sie einfachen Code, der in dem folgenden Link in MSDN dargestellt wird .

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

und umgekehrt

var str = JSON.stringify(arr);






$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback
});

Der Rückruf wird an die zurückgegebenen Daten übergeben, bei denen es sich um ein JavaScript-Objekt oder $.parseJSON() das von der JSON-Struktur definiert und mit der $.parseJSON() Methode analysiert wird.




JSON.parse(jsonString);

json.parse wird in ein Objekt umgewandelt.




Ich habe einen "besseren" Weg gefunden:

In CoffeeScript:

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

In Javascript:

var data;

try {
  data = JSON.parse(jqxhr.responseText);
} catch (_error) {}

data || (data = {
  message: 'Server error, please retry'
});



Sie können auch die reviver Funktion zum Filtern verwenden.

var data = JSON.parse(jsonString, function reviver(key, value) {
   //your code here to filter
});

Für weitere Informationen lesen Sie JSON.parse(jsonString)




Links