1. ホーム
  2. javascript

[解決済み] JavaScriptでTry/Catchを使わずに有効なJSON文字列かどうかをチェックする方法

2022-03-14 13:33:15

質問

のようなものです。

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

//should be true
IsJsonString(jsonString);

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

解決策には try/catch を含めるべきではない。私たちの中には "break on all errors" をオンにしている人がいて、彼らは無効な JSON 文字列でデバッガーがブレークするのを好みません。

どのように解決するのか?

まず、コメントです。質問内容は try/catch .
もし、使っても構わないのであれば、以下の回答を読んでみてください。 ここでは、ただ単に JSON という文字列を正規表現で記述することで、ほとんどの場合うまくいきます。

の450行目あたりを見てみてください。 https://github.com/douglascrockford/JSON-js/blob/master/json2.js

有効なJSONであるかどうかをチェックする正規表現があります。

if (/^[\],:{}\s]*$/.test(text.replace(/\\["\\\/bfnrtu]/g, '@').
replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {

  //the json is ok

}else{

  //the json is not ok

}

EDIT : 新バージョンのjson2.jsでは、上記よりもさらに高度な解析を行っていますが、依然として正規表現による置換( のコメント )