Wie kann ich angesichts einer Zeichenfolge von JSON-Daten diese Zeichenfolge sicher in ein JavaScript-Objekt umwandeln?
Natürlich kann ich das unsicher machen mit so etwas wie:
var obj = eval("(" + json + ')');
Aber das macht mich anfällig für die JSON-Zeichenfolge, die anderen Code enthält, dessen einfache Auswertung sehr gefährlich erscheint.
javascript
json
Matt Sheppard
quelle
quelle
eval
um eine JSON-Zeichenfolge zu analysieren, da Sie Ihren Code einer "Code-Injection" aussetzen würden. Verwenden SieJSON.parse(yourString)
stattdessen.Antworten:
JSON.parse(jsonString)
ist ein reiner JavaScript-Ansatz, solange Sie einen einigermaßen modernen Browser garantieren können.quelle
Requires document to be in IE8+ standards mode to work in IE8.
Die jQuery-Methode ist jetzt veraltet. Verwenden Sie stattdessen diese Methode:
Ursprüngliche Antwort mit veralteter jQuery-Funktionalität :
Wenn Sie jQuery verwenden, verwenden Sie einfach:
Es ist genau das, wonach Sie suchen (siehe die jQuery- Dokumentation ).
quelle
jQuery.parseJSON
Standardmäßig wird verwendet,JSON.parse
wenn es vorhanden ist. Der einzige Grund, dies gegenüber dem realen zu verwenden, besteht darin, dass Sie einen Fallback für <IE7 benötigen. Es wurde vor langerDiese Antwort ist für IE <7, für moderne Browser überprüfen Sie Jonathans Antwort oben.
Diese Antwort ist veraltet und Jonathans Antwort oben (
JSON.parse(jsonString)
) ist jetzt die beste Antwort .JSON.org bietet JSON-Parser für viele Sprachen, darunter vier verschiedene für JavaScript. Ich glaube, die meisten Leute würden darüber nachdenken json2.js als ihre Implementierung betrachten.
quelle
Verwenden Sie das einfache Codebeispiel in " JSON.parse () ":
und umgekehrt:
quelle
Ich bin mir nicht sicher, wie ich es anders machen soll, aber so geht's in Prototype (JSON-Tutorial) .
Wenn Sie
evalJSON()
als Argument mit true aufrufen, wird die eingehende Zeichenfolge bereinigt.quelle
Dies scheint das Problem zu sein:
Eine Eingabe, die über das Ajax-Websocket usw. empfangen wird und im String-Format vorliegt. Sie müssen jedoch wissen, ob dies der Fall ist
JSON.parsable
. Das Problem ist, wenn Sie es immer durchlaufenJSON.parse
, kann das Programm "erfolgreich" fortgesetzt werden, aber es wird immer noch ein Fehler in der Konsole mit dem gefürchteten angezeigt"Error: unexpected token 'x'"
.quelle
(function(){ postCookiesToHostileServer(); }());
im Kontext von Node möglicherweise noch schlimmeres Zeug haben.Wenn Sie jQuery verwenden , können Sie auch Folgendes verwenden:
Dann können Sie Dinge wie tun
usw.
quelle
Dem Rückruf werden die zurückgegebenen Daten übergeben, bei denen es sich um ein JavaScript-Objekt oder -Array handelt, das von der JSON-Struktur definiert und mithilfe der
$.parseJSON()
Methode analysiert wird.quelle
Nur zum Spaß, hier ist eine Möglichkeit, eine Funktion zu verwenden:
quelle
eval
und nicht sicher. : Peval
, ist jedoch für die Betreuer komplizierter und schwieriger zu verstehen.Verwenden
JSON.parse
ist wahrscheinlich der beste Weg.Hier ist ein Beispiel für eine Live-Demo .
quelle
Der einfachste Weg mit der
parse()
Methode:Dann können Sie die Werte der JSON-Elemente abrufen, zum Beispiel:
Verwenden von jQuery wie in der
jQuery.parseJSON()
Dokumentation beschrieben:quelle
Versuchen Sie, die Methode mit diesem Datenobjekt zu verwenden. Beispiel:
Data='{result:true,count:1}
'Diese Methode hilft in Nodejs wirklich, wenn Sie mit der seriellen Port-Programmierung arbeiten
quelle
eval
oderFunction
ist gleichermaßen anfälligundefined; function bye() {...} bye();
Ich habe einen "besseren" Weg gefunden:
In CoffeeScript:
In Javascript:
quelle
JSON-Analyse ist immer ein Schmerz. Wenn die Eingabe nicht wie erwartet ist, wird ein Fehler ausgegeben und es stürzt ab, was Sie tun.
Sie können die folgende winzige Funktion verwenden, um Ihre Eingabe sicher zu analysieren. Es wird immer ein Objekt gedreht, auch wenn die Eingabe ungültig ist oder bereits ein Objekt ist, das in den meisten Fällen besser ist:
quelle
Object.prototype.toString.call(input) === '[object Object]'
solltetypeof input === 'object'
IMO seinnull
Fall bereits zuvor behandelt, und ein Array ist ein Objekt. Wenn Sie es testen möchten, können Sie verwendeninstanceof
. Wenn Sie dieser Funktion eine gebenArray
, wird sie außerdem abfangen undreturn def
wenn sie das perfekt feine Array hätte zurückgeben können.toString()
Methode, um zu überprüfen, ob eine Variable ein Objekt ist oder nicht. Siehe AngularJS , jQuery , Underscore oder sogar Entwicklerjson.parse verwandelt sich in ein Objekt.
quelle
Wenn wir eine Zeichenfolge wie diese haben:
dann können wir
JSON.parse
diese Zeichenfolge einfach zweimal in ein JSON-Objekt konvertieren:Und wir können Werte aus dem JSON-Objekt extrahieren, indem wir:
Das Ergebnis wird sein:
quelle
JSON.parse()
konvertiert jede an die Funktion übergebene JSON-Zeichenfolge in ein JSON-Objekt.Um es besser zu verstehen, drücken Sie F12, um "Inspect Element" in Ihrem Browser zu öffnen, und gehen Sie zur Konsole, um die folgenden Befehle zu schreiben:
Führen Sie nun den folgenden Befehl aus:
Sie erhalten eine Ausgabe als Objekt
{result: true, count: 1}
.Um dieses Objekt zu verwenden, können Sie es der Variablen zuweisen, vielleicht
obj
:Mit
obj
dem.
Operator dot ( ) können Sie auf Eigenschaften des JSON-Objekts zugreifen.Versuchen Sie, den Befehl auszuführen:
quelle
Offizielle Dokumentation :
Die
JSON.parse()
Methode analysiert eine JSON-Zeichenfolge und erstellt den durch die Zeichenfolge beschriebenen JavaScript-Wert oder das beschriebene Objekt. Eine optionalereviver
Funktion kann bereitgestellt werden, um eine Transformation für das resultierende Objekt durchzuführen, bevor es zurückgegeben wird.Syntax:
Parameter:
text
: Die Zeichenfolge, die als JSON analysiert werden soll. Eine Beschreibung der JSON-Syntax finden Sie im JSON-Objekt.reviver (optional)
: Wenn es sich um eine Funktion handelt, wird festgelegt, wie der ursprünglich durch Parsen erzeugte Wert transformiert wird, bevor er zurückgegeben wird.Rückgabewert
Das Objekt, das dem angegebenen JSON-Text entspricht.
Ausnahmen
Löst eine SyntaxError-Ausnahme aus, wenn die zu analysierende Zeichenfolge kein gültiges JSON ist.
quelle
Das Konvertieren des Objekts in JSON und das anschließende Parsen funktioniert für mich wie folgt:
quelle
Analysieren Sie die JSON-Zeichenfolge mit
JSON.parse()
, und die Daten werden zu einem JavaScript-Objekt:Hier steht JSON für die Verarbeitung des JSON-Datasets.
Stellen Sie sich vor, wir haben diesen Text von einem Webserver erhalten:
So analysieren Sie ein JSON-Objekt:
Hier
obj
ist das jeweilige JSON-Objekt, das so aussieht:Um einen Wert abzurufen, verwenden Sie den
.
Operator:Konvertieren Sie ein JavaScript-Objekt in eine Zeichenfolge mit
JSON.stringify()
.quelle
Nur zum Cover Parse für verschiedene Eingabetypen
Analysieren Sie die Daten mit JSON.parse (), und die Daten werden zu einem JavaScript-Objekt.
Wenn Sie JSON.parse () für einen von einem Array abgeleiteten JSON verwenden, gibt die Methode anstelle eines JavaScript-Objekts ein JavaScript-Array zurück.
Datumsobjekte sind in JSON nicht zulässig. Für Dates mache so etwas
Funktionen sind in JSON nicht zulässig. Wenn Sie eine Funktion einfügen müssen, schreiben Sie sie als Zeichenfolge.
quelle
Ältere Frage, ich weiß, aber niemand bemerkt diese Lösung durch die Verwendung
new Function()
einer anonymen Funktion, die die Daten zurückgibt.Nur ein Beispiel:
Dies ist etwas sicherer, da es innerhalb einer Funktion ausgeführt wird und nicht direkt in Ihrem Code kompiliert wird. Wenn sich also eine Funktionsdeklaration darin befindet, wird sie nicht an das Standardfensterobjekt gebunden.
Ich verwende dies, um Konfigurationseinstellungen von DOM-Elementen (zum Beispiel das Datenattribut) einfach und schnell zu "kompilieren".
quelle
Zusammenfassung:
Javascript (sowohl Browser als auch NodeJS) verfügt über ein integriertes
JSON
Objekt. Auf diesem Objekt befinden sich 2 bequeme Methoden für den Umgang mitJSON
. Sie sind die folgenden:JSON.parse()
NimmtJSON
als Argument, gibt JS-Objekt zurückJSON.stringify()
Nimmt das JS-Objekt als Argument und gibt dasJSON
Objekt zurückAndere Anwendungen:
Außerdem können sie für den sehr bequemen Umgang mit
JSON
ihnen für andere Mittel verwendet werden. Die Kombination beiderJSON
Methoden ermöglicht es uns, sehr einfach tiefe Klone von Arrays oder Objekten zu erstellen. Zum Beispiel:quelle
Sie können auch die
reviver
Funktion zum Filtern verwenden.Weitere Informationen finden Sie unter
JSON.parse
.quelle
JSON.parse ist der richtige Weg, um eine Zeichenfolge in ein Objekt zu konvertieren. Wenn die analysierte Zeichenfolge jedoch kein Objekt ist oder wenn die Zeichenfolge nicht korrekt ist, wird ein Fehler ausgegeben, der dazu führt, dass der Rest des Codes beschädigt wird Ideal, um die JSON.parse-Funktion wie in try-catch zu verpacken
quelle
Versuchen Sie dies. Dieses ist in Typoskript geschrieben.
quelle
JSON.parse()
?quelle