比如:

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

//should be true
IsJsonString(jsonString);

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

解决方案不应包含try/catch.我们中的一些人打开"在所有错误上中断",他们不喜欢调试器中断那些无效的JSON字符串.

推荐答案

A comment first. The question was about not using try/catch.
If you do not mind to use it, read the answer below. Here we just check a JSON string using a regexp, and it will work in most cases, not all cases.

看一下450/https://github.com/douglascrockford/JSON-js/blob/master/json2.js这条线

有一个regexp可以判断有效的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进行了比上面更高级的解析,但仍然基于regexp替换(从comment of @Mrchief开始)

Javascript相关问答推荐

无法在page. evalve()内部使用外部函数

在shiny 模块中实现JavaScript

为什么子组件没有在reaction中渲染?

更新Reduxstore 中的状态变量,导致整个应用程序出现不必要的重新渲染

序列查找器功能应用默认值而不是读取响应

如何使用侧边滚动按钮具体滚动每4个格?

Redux工具包查询(RTKQ)端点无效并重新验证多次触发

fs. writeFile()vs fs.writeFile()vs fs.appendFile()

用JavaScript复制C#CRC 32生成器

Chart.js 4.4.2,当悬停在一个数据点上时,如何在工具提示中拥有多个数据点/标签?

Webpack在导入前混淆文件名

为什么这个.add.group({})在教程中运行得很好,但在我的游戏中就不行了?

触发异步函数后不能显示数据

FireBase云函数-函数外部的ENV变量

判断函数参数的类型

FireBase FiRestore安全规则-嵌套对象的MapDiff

重新呈现-react -筛选数据过多

JavaScript将字符串数字转换为整数

P5.js中矩形内的圆弧

未找到用于 Select 器的元素:in( puppeteer 师错误)