Frage Eine JSON-Zeichenfolge sicher in ein Objekt umwandeln


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.


1126
2017-09-05 00:12


Ursprung


Antworten:


JSON.parse(jsonString) ist ein reiner JavaScript-Ansatz, solange Sie einen einigermaßen modernen Browser garantieren können.


1699
2018-04-16 11:45



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 jQuery Dokumentation).


855
2017-09-02 14:07



Bearbeiten: Diese Antwort ist für IE <7, für moderne Browser überprüfen Jonathan die Antwort oben.

Edit: Diese Antwort ist veraltet und Jonathans Antwort oben (JSON.parse(jsonString)) ist jetzt der beste Antwort.

JSON.org hat JSON Parser für viele Sprachen, darunter 4 verschiedene für Javascript. Ich glaube, die meisten Leute würden darüber nachdenken json2.js ihre goto Implementierung.


138
2017-09-05 00:13



Verwenden Sie einfachen Code, der im Folgenden dargestellt wird Link auf MSDN.

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

und umgekehrt

var str = JSON.stringify(arr);

61
2017-12-15 23:26



Ich bin mir nicht sicher über andere Möglichkeiten, es zu tun, aber hier ist, wie Sie es tun Prototyp (JSON-Tutorial).

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

Berufung evalJSON () mit True, da das Argument die eingehende Zeichenfolge bereinigt.


17
2017-09-05 00:13



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 "erfolgreich" fortfahren kann, aber Sie sehen immer noch einen Fehler in der Konsole mit dem gefürchteten "Fehler: unerwartetes Token 'x'".

var data;

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

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

15
2018-04-29 07:37



Wenn du es benutzt jQuerykannst du auch einfach machen $.getJSON(url, function(data) { });

Dann kannst du Dinge wie machen data.key1.something, data.key1.something_else, etc.


11
2017-10-24 13:57



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

Der Callback wird an die zurückgegebenen Daten übergeben, bei denen es sich um ein JavaScript-Objekt oder -Array handelt, wie es in der JSON-Struktur definiert ist und die mit der Syntaxanalyse analysiert werden $.parseJSON() Methode.


10
2018-05-06 06:23