Comment vérifier si une chaîne est une chaîne JSON valide en JavaScript sans utiliser Try/Catch ?

Quelque chose comme :

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

//should be true
IsJsonString(jsonString);

//should be false
IsJsonString("foo");
IsJsonString("<div>foo</div>")

La solution ne doit pas contenir de try/catch. Certains d&#8217entre nous ont activé l&#8217option " break on all errors " et ils n&#8217aimeraient pas que le débogueur s&#8217interrompe sur ces chaînes JSON invalides.

Utilisez un analyseur JSON comme JSON.parse :

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

Dans le prototypeJS, nous avons la méthode isJSON. Vous pouvez l'essayer. Même json pourrait vous aider.

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

Vous pouvez utiliser la fonction javascript [eval()][1] pour vérifier s'il est valide.

Par exemple

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
}

Vous pouvez également utiliser la fonction JSON.parse de [json.org][2] :

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

if (json) {
  //this is json
}

J'espère que cela vous aidera.

ATTENTION : eval() est dangereux si quelqu'un ajoute du code JS malveillant, car il l'exécutera. Assurez-vous que la chaîne JSON est digne de confiance, c'est-à-dire que vous l'avez obtenue d'une source fiable.

Edit Pour ma 1ère solution, il est recommandé de faire cela.

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

Pour garantir le json-ness. Si le jsonString n'est pas du pur JSON, l'eval lèvera une exception.

[1] : http://en.wikipedia.org/wiki/JSON#JavaScript_eval.28.29 [2] : https://github.com/douglascrockford/JSON-js/blob/master/json2.js

Commentaires (11)