
Chi Chan
isJsonString('{ "Id": 1, "Name": "Coke" }')
sollte sein true
und
isJsonString('foo')
isJsonString('<div>foo</div>')
sollte sein false
.
Ich suche nach einer Lösung, die nicht verwendet wird try
/catch
weil ich meinen Debugger auf “bei allen Fehlern brechen” eingestellt habe und das dazu führt, dass er bei ungültigen JSON-Zeichenfolgen bricht.

Matt H.
Ich weiß, dass ich mit dieser Frage 3 Jahre zu spät bin, aber ich wollte mich einmischen.
Die Lösung von Gumbo funktioniert zwar hervorragend, behandelt jedoch einige Fälle nicht, für die keine Ausnahme ausgelöst wird JSON.parse({something that isn't JSON})
Ich ziehe es auch vor, das geparste JSON gleichzeitig zurückzugeben, damit der aufrufende Code nicht aufrufen muss JSON.parse(jsonString)
ein zweites Mal.
Das scheint für meine Bedürfnisse gut zu funktionieren:
/**
* If you don't care about primitives and only objects then this function
* is for you, otherwise look elsewhere.
* This function will return `false` for any valid json primitive.
* EG, 'true' -> false
* '123' -> false
* 'null' -> false
* '"I'm a string"' -> false
*/
function tryParseJSONObject (jsonString){
try {
var o = JSON.parse(jsonString);
// Handle non-exception-throwing cases:
// Neither JSON.parse(false) or JSON.parse(1234) throw errors, hence the type-checking,
// but... JSON.parse(null) returns null, and typeof null === "object",
// so we must check for that, too. Thankfully, null is falsey, so this suffices:
if (o && typeof o === "object") {
return o;
}
}
catch (e) { }
return false;
};

kukko
Ich habe eine wirklich einfache Methode verwendet, um eine Zeichenfolge zu überprüfen, ob es sich um ein gültiges JSON handelt oder nicht.
function testJSON(text){
if (typeof text!=="string"){
return false;
}
try{
var json = JSON.parse(text);
return (typeof json === 'object');
}
catch (error){
return false;
}
}
Ergebnis mit einem gültigen JSON-String:
var input="["foo","bar",{"foo":"bar"}]";
testJSON(input); // returns true;
Ergebnis mit einer einfachen Zeichenfolge;
var input="This is not a JSON string.";
testJSON(input); // returns false;
Ergebnis mit einem Objekt:
var input={};
testJSON(input); // returns false;
Ergebnis mit Nulleingabe:
var input=null;
testJSON(input); // returns false;
Die letzte gibt false zurück, da der Typ von Nullvariablen Objekt ist.
Das funktioniert immer. 🙂
Hier ist auch die Typoskript-Version:
JSONTryParse(input: any) {
try {
//check if the string exists
if (input) {
var o = JSON.parse(input);
//validate the result too
if (o && o.constructor === Object) {
return o;
}
}
}
catch (e: any) {
}
return false;
};

Machado
// vanillaJS
function isJSON(str) {
try {
return (JSON.parse(str) && !!str);
} catch (e) {
return false;
}
}
Verwendungszweck: isJSON({})
wird sein false
, isJSON('{}')
wird sein true
.
Um zu überprüfen, ob etwas ein ist Array
oder Object
(geparst JSON):
// vanillaJS
function isAO(val) {
return val instanceof Array || val instanceof Object ? true : false;
}
// ES2015
var isAO = (val) => val instanceof Array || val instanceof Object ? true : false;
Verwendungszweck: isAO({})
wird sein true
, isAO('{}')
wird sein false
.
10107500cookie-checkWie überprüfe ich, ob eine Zeichenfolge eine gültige JSON-Zeichenfolge ist?yes
Für diejenigen, die neugierig sind, hier ist, wie die V8-Engine ihr JSON-Parsing durchführt: v8.googlecode.com/svn/trunk/src/json-parser.h
– BEIM
7. September 2014 um 7:57 Uhr
Verwenden Sie nur 2 Zeilen, um es mit try catch zu überprüfen. var isValidJSON = wahr; try { JSON.parse(jsonString) } catch { isValidJSON = false; }
– efkan
30. August 2016 um 18:29 Uhr
Außerdem hatte ich hier geantwortet: stackoverflow.com/a/39236371/3765109
– efkan
4. Januar 2017 um 17:16 Uhr
Das funktioniert zwar, ist aber furchtbar klobig und schlechte Übung. Try/Catch ist für außergewöhnliches Verhalten und Fehlerbehandlung gedacht, nicht für den allgemeinen Programmablauf.
– Tasgall
26. Juni 2017 um 19:31 Uhr
@Tasgall In der Regel ja. Aber was tun, wenn der Try/Catch-Ansatz performanter ist als jeder validatorbasierte Ansatz? Gehen Sie mit der (manchmal erheblich) langsameren Option, nur weil die Alternative “schlechte Praxis” ist? An der Try/Catch-Methode ist funktionell nichts auszusetzen, also gibt es keinen Grund, sie nicht zu verwenden. Es ist wichtig, dass neue Programmierer gute Codierungsstandards entwickeln, aber es ist ebenso wichtig, das blinde Festhalten an herkömmlichen Richtlinien nicht zu verstärken, insbesondere in Fällen, in denen die Richtlinien die Dinge schwieriger machen, als sie sein müssen.
– Abion47
15. August 2018 um 17:53 Uhr