优雅的JSON.parse异常处理程序

时间:2019-07-12 23:36:09

标签: javascript json

假设我们有一个函数可以多次调用JSON.parse(someText)。但是,someText不一定经过错误检查,例如,"foo"可以传递到JSON.parse中。输入非JSON值后,我想返回一个空对象{}

很显然,我们可以使用try-catch来轻松处理此问题。但是,try-catch丑陋而不优雅-是否有一种快速,简单的单一方法来执行类似操作?

2 个答案:

答案 0 :(得分:0)

(这将使将来的读者不明白为什么这是错误的)您应该捕获并处理异常,而不是忽略它们。开发这些功能的人员依赖于您捕获异常,从而能够对异常做出适当的反应。优雅与美丽在情人眼中,与任何艺术品一样,您也可以写作,以便其他人都能欣赏。每个人都会得到try...catch个区块。

无法在1行代码中完成。但是,您可以做一些讨厌的事情来绕过异常处理。


方法1

手动处理全局onError方法。

function handleErr(msg, url, line_no){ 
   var errorMsg = "Error: " + msg + "\n"; 
       errorMsg += "URL: " + url + "\n"; 
       errorMsg += "Line: " + line_no + "\n\n"; 

    console.log(errorMsg); 

 return true;
} 

// Set the global onerror; 
onerror = handleErr;

现在,您可以处理(即忽略)此函数中的错误。您可以使用位代码打开和关闭它。或者,您可以去吃香蕉,然后在处理程序中执行return true;


方法2

使用setTimeout,线程将因异常而死亡,但您的代码将继续执行,这也是美观的ES6单行代码。

setTimeout(() => JSON.parse("not json: fghfghg"), 0)
console.log("Code still running")

方法3

对于非主流的“优雅”异常处理,您可以实现并使用Eitherexample

答案 1 :(得分:0)

尽管先前有关于异常处理的评论,但是您可以应用单行代码来实现您的目标。唯一的问题是数字和数字字符串。这些将被解析并以数字形式返回

tcp://YOURHOST:PORT