1496 Stimmen

Sichere Umwandlung einer JSON-Zeichenkette in ein Objekt

Angesichts einer Zeichenfolge von JSON-Daten, wie kann ich sicher, dass die Zeichenfolge in ein JavaScript-Objekt zu machen?

Offensichtlich kann ich dies auf unsichere Weise mit etwas wie:

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

aber das macht mich anfällig für die JSON-Zeichenfolge, die anderen Code enthält, der sehr gefährlich erscheint, wenn man ihn einfach auswertet.

88 Stimmen

In den meisten Sprachen birgt eval ein zusätzliches Risiko. Eval lässt eine offene Tür, die von Hackern ausgenutzt werden kann. JEDOCH ist zu bedenken, dass jedes Javascript auf dem Client läuft. ERWARTEN dass sie von Hackern verändert wird. Sie können alles auswerten, was sie wollen, indem sie einfach die Konsole benutzen. Sie müssen Ihren Schutz auf der Serverseite aufbauen.

24 Stimmen

Ok, jetzt haben wir 2014 und Sie sollten niemals eval um eine JSON-Zeichenfolge zu parsen, da Sie Ihren Code der "Code-Injection" aussetzen würden. verwenden JSON.parse(yourString) ではなく

1 Stimmen

Sind die JSON-Daten ein Literal?

2120voto

Jonathan. Punkte 53231

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

79 Stimmen

Ich bin ziemlich sicher, dass es für Node.js sicher ist

3 Stimmen

Es wird nicht von allen Browsern unterstützt, aber das Skript unter dem untenstehenden Link fügt es den Browsern hinzu, die es nicht haben: github.com/douglascrockford/JSON-js/blob/master/json2.js

78 Stimmen

@vsync Sie wissen schon, dass dies die NUR Reine Javascript-Antwort... wenn Sie die Beschreibung für den Javascript-Tag lesen, werden Sie dies sehen... " Sofern nicht auch ein Tag für ein Framework/eine Bibliothek enthalten ist, wird eine reine JavaScript-Antwort erwartet. " Ich gebe dem eine +1 weil es die einzige Antwort in Javascript ist...

903voto

Alex V Punkte 17728

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

let jsonObject = JSON.parse(jsonString);

Originalantwort mit veralteter jQuery-Funktionalität :

Wenn Sie jQuery verwenden, benutzen Sie einfach:

jQuery.parseJSON( jsonString );

Es ist genau das, wonach Sie suchen (siehe jQuery Dokumentation ).

9 Stimmen

Gibt es einen Grund, dies gegenüber JSON.parse() zu verwenden?

10 Stimmen

jQuery.parseJSON verwendet standardmäßig JSON.parse wenn es existiert, so dass der einzige Grund, diese über die echte zu verwenden ist, wenn Sie ein Fallback für <IE7 benötigen. Es wurde geändert Weg zurück in jQuery 1.6: james.padolsey.com/jquery/#v=1.6.0&fn=jQuery.parseJSON

13 Stimmen

Update 2016: Ab jQuery 3.0, $.parseJSON ist veraltet und Sie sollten stattdessen die native Methode JSON.parse verwenden.

169voto

John Punkte 14038

Diese Antwort gilt für IE < 7, für moderne Browser siehe Jonathans Antwort oben.

Diese Antwort ist veraltet und Jonathan's Antwort oben ( JSON.parse(jsonString) ) ist jetzt die beste Antwort .

JSON.org hat JSON-Parser für viele Sprachen, darunter vier verschiedene für JavaScript. Ich glaube, die meisten Leute würden die json2.js ihre Goto-Implementierung.

34 Stimmen

Ich wünschte, die Leute würden aufhören, diese Antwort herunterzuvoten. Sie war richtig, als sie 2008 veröffentlicht wurde. Bewerten Sie einfach die neue Antwort hoch.

26 Stimmen

Wenn die Antwort nicht mehr aktuell ist, sollten Sie sie aktualisieren.

4 Stimmen

Für IE < 8 müssen Sie dies verwenden.

80voto

Ronald Coarite Punkte 3832

Verwenden Sie das einfache Codebeispiel in " JSON.parse() ":

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

und rückgängig zu machen:

var str = JSON.stringify(arr);

27voto

Cody Punkte 9242

Dies scheint das Problem zu sein:

Eine Eingabe, die über einen Ajax-Websocket usw. empfangen wird, wird im String-Format vorliegen, aber Sie müssen wissen, ob es sich um JSON.parsable . Das Problem ist, wenn Sie es immer durchlaufen lassen JSON.parse kann das Programm "erfolgreich" fortgesetzt werden, aber in der Konsole wird trotzdem ein Fehler mit dem gefürchteten "Error: unexpected token 'x'" .

var data;

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

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

0 Stimmen

NEIN. Das Problem ist, dass Sie ein JSON-Objekt erwarten und am Ende mit (function(){ postCookiesToHostileServer(); }()); oder noch fiesere Sachen im Zusammenhang mit Node.

0 Stimmen

Nun JSON.parse schrubbt die Eingabe von Funktionen (die in diesem Fall nicht helfen würde, da seine ein IIF --> Objekt). Es scheint, der beste Weg, um über dieses Thema zu gehen ist try/catch. (Siehe Bearbeiten)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X