Mein JavaScript stürzt manchmal in dieser Zeile ab:
var json = eval('(' + this.responseText + ')');
Abstürze werden verursacht, wenn das Argument von eval() ist kein JSON. Gibt es eine Möglichkeit zu überprüfen, ob die Zeichenfolge JSON ist, bevor Sie diesen Aufruf tätigen?
Ich möchte kein Framework verwenden – gibt es eine Möglichkeit, dies mit nur eval()? (Es gibt einen guten Grund, versprochen.)
Sie könnten versuchen, JSON.parse() in einem try/catch … zu fangen, es ist kein gültiges JSON-Markup. Das ist natürlich irgendwie ineffizient, heh … Können Sie mir ein Beispiel für das ungültige JSON-Markup geben, das Sie erhalten?
– Warzig
22. Februar 2010 um 19:50 Uhr
Mögliches Duplikat von How to check if a string is a valid JSON string in JavaScript without using Try/Catch
– Donald Duck
21. Juni 2019 um 15:47 Uhr
Brettkelly
Wenn Sie die einbeziehen JSON-Parser von json.org können Sie die Funktion parse() verwenden und sie einfach in einen try/catch einschließen, etwa so:
Ich empfehle Ihnen dringend, a Javascript-JSON-Bibliothek zum Serialisieren von und nach JSON. eval() ist ein Sicherheitsrisiko, das niemals verwendet werden sollte, es sei denn, Sie sind es absolut sicher dass seine Eingabe bereinigt und sicher ist.
Wenn eine JSON-Bibliothek vorhanden ist, packen Sie den Aufruf einfach in seine parse() Äquivalent in einem try/catch-Block zur Verarbeitung von Nicht-JSON-Eingaben:
Vielleicht hilft das: Mit diesem Code kommen Sie direkt an Ihre Daten…
<!DOCTYPE html>
<html>
<body>
<h3>Open console, please, to view result!</h3>
<p id="demo"></p>
<script>
var tryJSON = function (test) {
try {
JSON.parse(test);
}
catch(err) {
// maybe you need to escape this… (or not)
test="""+test.replace(/\\?"/g,'\\"')+'"';
}
eval('test="+test);
console.debug("Try json:', test);
};
// test with string…
var test="bonjour "mister"";
tryJSON(test);
// test with JSON…
var test="{"fr-FR": "<p>Ceci est un texte en français !</p>","en-GB": "<p>And here, a text in english!</p>","nl-NL": "","es-ES": ""}";
tryJSON(test);
</script>
</body>
</html>
Das Problem mit je nach try-catch Ansatz ist das JSON.parse('123') = 123 und es wird keine Ausnahme ausgelöst. Daher zusätzlich zu den try-catchmüssen wir den Typ wie folgt überprüfen:
jQuery $.ajax() werde die hinzufügen responseJSON -Eigenschaft auf das Antwortobjekt, und um zu testen, ob die Antwort JSON ist, können Sie Folgendes verwenden:
if (xhr.hasOwnProperty('responseJSON')) {}
11447900cookie-checkAJAX: Prüfen, ob eine Zeichenfolge JSON ist?yes
Sie könnten versuchen, JSON.parse() in einem try/catch … zu fangen, es ist kein gültiges JSON-Markup. Das ist natürlich irgendwie ineffizient, heh … Können Sie mir ein Beispiel für das ungültige JSON-Markup geben, das Sie erhalten?
– Warzig
22. Februar 2010 um 19:50 Uhr
Mögliches Duplikat von How to check if a string is a valid JSON string in JavaScript without using Try/Catch
– Donald Duck
21. Juni 2019 um 15:47 Uhr