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’entre nous ont activé l’option " break on all errors " et ils n’aimeraient pas que le débogueur s’interrompe sur ces chaînes JSON invalides.
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