Etwas wie:
var jsonString = '{ "Id": 1, "Name": "Coke" }';
//should be true
IsJsonString(jsonString);
//should be false
IsJsonString("foo");
IsJsonString("<div>foo</div>")
Die Lösung sollte kein try / catch enthalten. Einige von uns aktivieren "Bei allen Fehlern brechen" und sie mögen es nicht, wenn der Debugger bei diesen ungültigen JSON-Zeichenfolgen bricht.
javascript
json
Chi Chan
quelle
quelle
try
?Antworten:
Ein Kommentar zuerst. Die Frage war, nicht zu verwenden
try/catch
.Wenn es Ihnen nichts ausmacht, es zu verwenden, lesen Sie die Antwort unten. Hier überprüfen wir nur einen
JSON
String mit einem regulären Ausdruck, und er funktioniert in den meisten Fällen, nicht in allen Fällen.Schauen Sie sich in https://github.com/douglascrockford/JSON-js/blob/master/json2.js in der Zeile 450 um
Es gibt einen regulären Ausdruck, der nach einem gültigen JSON sucht, etwa:
BEARBEITEN : Die neue Version von json2.js führt eine erweiterte Analyse durch als oben, basiert jedoch immer noch auf einem regulären Ausdruck (aus dem Kommentar von @Mrchief ).
quelle
Verwenden Sie einen JSON-Parser wie
JSON.parse
:quelle
JSON.parse("false")
auswertet zu falsch als auch.Ich weiß, dass ich 3 Jahre zu spät zu dieser Frage komme, aber ich wollte mich einmischen.
Die Lösung von Gumbo funktioniert zwar hervorragend, behandelt jedoch nicht einige Fälle, in denen keine Ausnahme gemacht wird
JSON.parse({something that isn't JSON})
Ich ziehe es auch vor, den analysierten JSON gleichzeitig zurückzugeben, damit der aufrufende Code nicht aufgerufen werden muss
JSON.parse(jsonString)
zweites Mal werden muss.Dies scheint für meine Bedürfnisse gut zu funktionieren:
quelle
o && o !== null
ist überflüssig.undefined
, nichtfalse
weilfalse
es sich um eine gültige JSON-Zeichenfolge handelt und es keine Möglichkeit gibt, zwischentryParseJSON("false")
undtryParseJSON("garbage")
Verwendung:
isJSON({})
wird seinfalse
,isJSON('{}')
wird seintrue
.So überprüfen Sie, ob es sich bei einem um einen
Array
oderObject
( analysierten JSON) handelt:Verwendung:
isAO({})
wird seintrue
,isAO('{}')
wird seinfalse
.quelle
null
diese Validierung bestanden wurde.return !!(JSON.parse(str) && str);
sollte Nullwerte blockieren. Ich werde die Antwort mit diesem Code aktualisieren.parse()
Test nicht bestehen, was zu WTFs führt.Hier mein Arbeitscode:
quelle
typeof str === 'string'
Ich habe eine wirklich einfache Methode verwendet, um eine Zeichenfolge zu überprüfen, ob es sich um einen gültigen JSON handelt oder nicht.
Ergebnis mit einer gültigen JSON-Zeichenfolge:
Ergebnis mit einer einfachen Zeichenfolge;
Ergebnis mit einem Objekt:
Ergebnis mit Null-Eingabe:
Der letzte gibt false zurück, da der Typ der Nullvariablen Objekt ist.
Das funktioniert immer. :) :)
quelle
null
Eingabe falsch zurück. Die Eingabe "false" ist jedoch eine gültige JSON-Zeichenfolge. Dies wird analysiertboolean (false)
. Jetzt ändere ich den Code, um genauer zu sein.In prototypeJS haben wir die Methode isJSON . Das kannst du versuchen. Sogar json könnte helfen.
quelle
"{ foo: 42 }".isJSON()
? Wennfalse
, wie ich annehme (Ergebnis sollte der Funktion des Dokuments folgen), dann ist die gute Frage, warum es falsch ist.{ foo: 42 }
scheint vollkommen gültig zu sein JSON.Aus der
String.isJSON
Definition des Prototyp-Frameworks hierDies ist also die Version, die zum Übergeben eines Zeichenfolgenobjekts verwendet werden kann
quelle
Ich habe JQuery verwendet, um JSON-Zeichenfolgen zu analysieren, und ich habe die trycatch-Anweisung verwendet, um Ausnahmen zu behandeln, aber das Auslösen von Ausnahmen für nicht analysierbare Zeichenfolgen hat meinen Code verlangsamt. Daher habe ich mit einfachem Regex die Zeichenfolge überprüft, ob es sich um eine mögliche JSON-Zeichenfolge handelt oder nicht Nachdem ich die Syntax überprüft habe, habe ich die Zeichenfolge wie gewohnt mithilfe von JQuery analysiert:
quelle
Vielleicht wird es nützlich sein:
Ausgabe:
IE7: Zeichenfolge , Objekt, Zeichenfolge, Zeichenfolge
CHROM: Objekt, Objekt, Zeichenfolge, Zeichenfolge
quelle
Ich glaube ich weiß warum du das vermeiden willst. Aber vielleicht versuchen & fangen! == versuchen & fangen. ; o) Das kam mir in den Sinn:
Sie können also auch einen schmutzigen Clip zum JSON-Objekt erstellen, z.
Da dies so gekapselt wie möglich ist, kann es bei einem Fehler nicht brechen.
quelle
Hier ist auch die Typoskript-Version:
quelle
quelle
Ich schließe aus dem einleitenden Kommentar, dass der Anwendungsfall beschreibt, ob eine Antwort HTML oder JSON ist. In diesem Fall, wenn Sie dies tun JSON erhalten, sollten Sie es wahrscheinlich sein , Parsen und Umgang mit ungültigen JSON an einem gewissen Punkt in Ihrem Code sowieso. Abgesehen von allem stelle ich mir vor, dass Sie von Ihrem Browser informiert werden möchten, falls JSON erwartet wird, aber ungültiges JSON empfangen wird (ebenso wie Benutzer per Proxy einer aussagekräftigen Fehlermeldung)!
Eine vollständige Regex für JSON ist daher nicht erforderlich (wie es meiner Erfahrung nach für die meisten Anwendungsfälle der Fall wäre). Sie sind wahrscheinlich besser dran, wenn Sie Folgendes verwenden:
Das sollte Ihnen ersparen, dass Sie einen gültigen Nicht-JSON-Code ausnahmsweise behandeln und sich gleichzeitig um Duff Json kümmern müssen.
quelle
hoffe, das funktioniert auch bei dir
quelle
Wenn es Fehler gibt, geben Sie false zurück.
Wenn keine Fehler vorliegen, geben Sie json-Daten zurück
quelle
Sie können die Javascript- Funktion eval () verwenden, um zu überprüfen, ob sie gültig ist.
z.B
Alternativ können Sie die
JSON.parse
Funktion von json.org verwenden :Hoffe das hilft.
WARNUNG :
eval()
ist gefährlich , wenn jemand böswillig JS Code fügt, da sie es ausgeführt wird. Stellen Sie sicher, dass der JSON-String vertrauenswürdig ist , dh Sie haben ihn von einer vertrauenswürdigen Quelle erhalten.Bearbeiten Für meine erste Lösung wird empfohlen, dies zu tun.
Um json-ness zu garantieren . Wenn der
jsonString
JSON nicht rein ist, löst die Auswertung eine Ausnahme aus.quelle
Oh, Sie können auf jeden Fall try catch verwenden, um zu überprüfen, ob es sich um einen gültigen JSON handelt oder nicht
Getestet mit Firfox Quantom 60.0.1
Verwenden Sie die Funktion innerhalb einer Funktion, um den JSON zu testen, und verwenden Sie diese Ausgabe, um die Zeichenfolge zu validieren. hört ein Beispiel.
quelle
Die Funktion
IsJsonString(str)
, die verwendet wirdJSON.parse(str)
, funktioniert in meinem Fall nicht.Ich habe versucht, die JSON- Ausgabe von GraphiQL zu validieren. Es wird immer false zurückgegeben. Glück für mich, isJSON besser funktioniert:
Beispielausgabe:
quelle
Für Leute, die die .Net-Konvention von "try" -Funktionen mögen, die einen Booleschen Wert zurückgeben und einen byref-Parameter verarbeiten, der das Ergebnis enthält. Wenn Sie den out-Parameter nicht benötigen, können Sie ihn weglassen und einfach den Rückgabewert verwenden.
StringTests.js
StringUtils.js
ObjectUtils.js
quelle
Sehr einfacher Einzeiler-Code (aber Hacky-Ansatz)
quelle