0

重複の可能性:
Try/Catchを使用せずに文字列がJavaScriptで有効なJSON文字列であるかどうかを確認する方法

質問はすでにここで尋ねられました:Try/Catchを使用せずに文字列がJavaScriptで有効なJSON文字列であるかどうかを確認する方法。有効な答えは与えられませんでした、検証されたものでさえ質問に答えていませんでした。

したがって、try / catchsを使用してこれを行わない唯一の方法は、正規表現を使用することです。回答の1つで指定された正規表現はevalに対してのみ検証されていたため、「2001-05-06」のような単純な文字列は、JSONでなくても正規表現を渡します。

では、整形式のJSON文字列に対して検証するための優れた正規表現はありますか?

4

2 に答える 2

2

Using a regex instead of a try/catch is replacing a correct solution with a non working hack.

The link you give suggests to change the JSON parsing code that you can modify to not throw an exception. I would suggest replacing in json_parse.js the following code

    error = function (m) {
    // Call error when something is wrong.
        throw {
            name:    'SyntaxError',
            message: m,
            at:      at,
            text:    text
        };
    },

by the call of a callback you would provide.

But to be frank, my most reasonable suggestion would be to use try/catch. That's the best tool you have here. Note that my JSON.parse modification "suggestion" supposes to manage the break from all loops/recursions, which is precisely what an exceptions does.

于 2012-11-13T10:44:47.930 に答える
0

リンクからこれを試してください

var jsonData = '{"1":"test"}';

if (/^[\],:{}\s]*$/.test(jsonData.replace(/\\["\\\/bfnrtu]/g, '@'). replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'). replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {    
    alert('ok');
}else{    
    alert('no');
}
于 2012-11-13T10:54:48.050 に答える