我正在使用defiantjs执行json搜索。
result = JSON.search(data, '//*[name="Gheorghe"]');
如果在json中找不到该值,我会收到错误Cannot read property 'Gheorghe' of undefined
。
如果没有匹配的搜索字符串,有没有办法返回其他内容?
答案 0 :(得分:2)
try {
//check for return value (search result or falsy value)
result = JSON.search(data, '//*searchValue') || 'not found';
} catch (e) {
//if there was an error in the request
console.log(e);
result = 'Not found. But dude, we could not even finish your request, as we encountered the following error: ' + e;
}
答案 1 :(得分:1)
您可以使用try-catch声明
try ... catch语句标记要尝试的语句块,并指定响应,如果抛出异常。
示例强>
在以下示例中,try块中的代码可能会抛出三个异常: TypeError , RangeError 和 EvalError (错误类型:
If objx.LinkedCell <>"" Then .Range(objx.LinkedCell).Offset(0, 1).Select '... rest of your code End If
,EvalError
,InternalError
,RangeError
,ReferenceError
,SyntaxError
,TypeError
)。发生异常时,控制权转移到适当的catch子句。如果异常不是指定的异常之一并且找到了无条件的catch子句,则控制转移到该catch子句。
URIError
&#13;
答案 2 :(得分:0)
为什么不能使用
if(typeof(JSON.search(data, '//*[name="Gheorghe"]')) !== 'undefined') {
result = JSON.search(data, '//*[name="Gheorghe"]');
}
else {
//something else
}
答案 3 :(得分:0)
Defiant.js,第三方图书馆应该处理这个问题。我承认他们不是。
在这种情况下,有两种方法可以解决这个问题。
要修改库以在未找到结果时返回undefined - 建议不要这样做,因为对于正在处理代码库的其他开发人员以及使用bower /维护库的版本控制将会有问题NPM。
使用try catch实现 - 这是解决此问题的理想方法,因为您不必对第三方库进行更改,您可以轻松触发以检查是否存在try块中的错误等于"Cannot read property 'Gheorghe' of undefined"
,您可以运行首选回调。
这是我建议的解决方案。
var name = "Gheorge";
try {
result = JSON.search(data, '//*[name="' + name + '"]');
}
catch (error === "Cannot read property '" + name + "' of undefined") {
// As there could be any type of error from the function JSON.search
console.log(error);
yourErrorHandler(error);
}