Wie prüft man, ob eine Zeichenkette eine gültige JSON-Zeichenkette in JavaScript ist, ohne Try/Catch zu verwenden?

Etwa so:

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 "break on all errors" und sie mögen es nicht, wenn der Debugger bei diesen ungültigen JSON-Strings abbricht.

Verwenden Sie einen JSON-Parser wie JSON.parse:

function IsJsonString(str) {
    try {
        JSON.parse(str);
    } catch (e) {
        return false;
    }
    return true;
}
Kommentare (14)

In prototypeJS haben wir die Methode isJSON. Sie können das ausprobieren. Auch json könnte helfen.

"something".isJSON();
// -> false
"\"something\"".isJSON();
// -> true
"{ foo: 42 }".isJSON();
// -> false
"{ \"foo\": 42 }".isJSON();
Kommentare (5)

Sie können die Javascript-Funktion eval() verwenden, um zu überprüfen, ob sie gültig ist.

z.B..

var jsonString = '{ "Id": 1, "Name": "Coke" }';
var json;

try {
  json = eval(jsonString);
} catch (exception) {
  //It's advisable to always catch an exception since eval() is a javascript executor...
  json = null;
}

if (json) {
  //this is json
}

Alternativ können Sie auch die Funktion JSON.parse von json.org verwenden:

try {
  json = JSON.parse(jsonString);
} catch (exception) {
  json = null;
}

if (json) {
  //this is json
}

Hoffentlich hilft das.

WARNUNG: eval() ist gefährlich, wenn jemand bösartigen JS-Code hinzufügt, da er diesen ausführen wird. Stellen Sie sicher, dass der JSON-String vertrauenswürdig ist, d.h. Sie haben ihn aus einer vertrauenswürdigen Quelle.

Edit Für meine 1. Lösung ist es empfehlenswert, dies zu tun.

 try {
      json = eval("{" + jsonString + "}");
    } catch (exception) {
      //It's advisable to always catch an exception since eval() is a javascript executor...
      json = null;
    }

Um die JSON-Natur zu garantieren. Wenn der jsonString nicht reines JSON ist, wird das eval eine Exception auslösen.

Kommentare (11)