Ich habe eine Zeichenfolge in einer Java-Serveranwendung, auf die über AJAX zugegriffen wird. Es sieht ungefähr so aus:
var json = [{
"adjacencies": [
{
"nodeTo": "graphnode2",
"nodeFrom": "graphnode1",
"data": {
"$color": "#557EAA"
}
}
],
"data": {
"$color": "#EBB056",
"$type": "triangle",
"$dim": 9
},
"id": "graphnode1",
"name": "graphnode1"
},{
"adjacencies": [],
"data": {
"$color": "#EBB056",
"$type": "triangle",
"$dim": 9
},
"id": "graphnode2",
"name": "graphnode2"
}];
Gibt es eine einfache Möglichkeit, die Zeichenfolge vom Server in ein lebendes JavaScript-Objekt (oder Array) umzuwandeln, wenn sie vom Server abgerufen wird? Oder muss ich die Zeichenfolge manuell teilen und mein Objekt manuell erstellen?
Antworten:
Unterstützung für moderne Browser
JSON.parse()
.In Browsern, die dies nicht tun, können Sie die
json2
Bibliothek einschließen .quelle
Der springende Punkt bei JSON ist, dass JSON-Zeichenfolgen in native Objekte konvertiert werden können, ohne etwas zu tun. Überprüfen Sie dies Link
Sie können entweder
eval(string)
oder verwendenJSON.parse(string)
.Ist
eval
jedoch riskant. Von json.org:quelle
Machen Sie es wie jQuery! (die Essenz)
Auf diese Weise benötigen Sie keine externe Bibliothek und es funktioniert immer noch in alten Browsern.
quelle
eval()
.Um alle Elemente eines Arrays zu sammeln und ein JSON-Objekt zurückzugeben
Um die gleichen Daten zu analysieren, gehen wir so durch
quelle
Sie könnten auch verwenden
eval()
,JSON.parse()
ist aber sicherer und einfacher. Warum sollten Sie das tun?gut und funktioniert
Ich sehe keinen Grund, warum Sie es vorziehen würden, zu verwenden
eval
. Dies gefährdet nur Ihre Anwendung.Das heißt - das ist auch möglich.
schlecht - funktioniert aber auch
Warum ist
eval
eine schlechte Idee?Betrachten Sie das folgende Beispiel.
Einige Drittanbieter oder Benutzer haben JSON-Zeichenfolgendaten bereitgestellt.
Ihr serverseitiges Skript verarbeitet diese Daten.
Verwenden von
JSON.parse
:wird werfen:
Funktion wird nicht ausgeführt.
Du bist sicher.
Verwenden von
eval()
:führt die Funktion aus und gibt den Text zurück.
Wenn ich diese harmlose Funktion durch eine ersetze, die Dateien aus Ihrem Website-Ordner entfernt, wurden Sie gehackt. In diesem Beispiel werden keine Fehler / Warnungen ausgegeben.
Du bist NICHT sicher.
Ich konnte eine JSON-Textzeichenfolge so bearbeiten, dass sie als Funktion fungiert, die auf dem Server ausgeführt wird.
eval(JSON)[0].adjacencies[0].nodeTo
erwartet, eine JSON-Zeichenfolge zu verarbeiten, aber in Wirklichkeit haben wir gerade eine Funktion auf unserem Server ausgeführt.Dies könnte auch verhindert werden, wenn wir alle vom Benutzer bereitgestellten Daten serverseitig überprüfen, bevor wir sie an eine
eval()
Funktion übergeben. Warum jedoch nicht einfach das integrierte Tool zum Parsen von JSON verwenden und all diese Probleme und Gefahren vermeiden?quelle
Und wenn Sie auch möchten, dass das deserialisierte Objekt Funktionen hat, können Sie mein kleines Tool verwenden: https://github.com/khayll/jsmix
quelle
Wenn Sie die Zeichenfolge serverseitig in den HTML-Code einfügen, müssen Sie nichts tun:
Für einfaches Java in jsp:
Für JSP-Breitenstreben:
quelle
Ich denke, das sollte helfen:
Dokumentationen belegen auch, dass Sie require () für json-Dateien verwenden können: https://www.bennadel.com/blog/2908-you-can-use-require-to-load-json-javascript-object-notation-files -in-node-js.htm
quelle