如何检查字符串是否为有效的 JSON 字符串?

新手上路,请多包涵
isJsonString('{ "Id": 1, "Name": "Coke" }')

应该是 true

isJsonString('foo')
isJsonString('<div>foo</div>')

应该是 false 的。

我正在寻找一种不使用 try / catch 的解决方案,因为我将调试器设置为“在所有错误上中断”,这会导致它在无效的 JSON 字符串上中断。

原文由 Chi Chan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

先来个评论。问题是关于不使用 try/catch

如果您不介意使用它,请阅读下面的答案。

这里我们只是使用正则表达式检查一个 JSON 字符串,它在大多数情况下都可以工作,而不是所有情况。

看看 https://github.com/douglascrockford/JSON-js/blob/master/json2.js 中的第 450 行

有一个正则表达式可以检查有效的 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

 }

编辑:新版本的 json2.js 进行了比上面更高级的解析,但仍然基于正则表达式替换(来自 @Mrchief 的评论

原文由 Mic 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用像 JSON.parse 这样的 JSON 解析器:

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

原文由 Gumbo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题