Defiantjs如果没有结果

时间:2016-05-19 02:18:52

标签: javascript jquery arrays json

我正在使用defiantjs执行json搜索。

result = JSON.search(data, '//*[name="Gheorghe"]');

如果在json中找不到该值,我会收到错误Cannot read property 'Gheorghe' of undefined

如果没有匹配的搜索字符串,有没有办法返回其他内容?

4 个答案:

答案 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 EvalErrorInternalErrorRangeErrorReferenceErrorSyntaxErrorTypeError)。发生异常时,控制权转移到适当的catch子句。如果异常不是指定的异常之一并且找到了无条件的catch子句,则控制转移到该catch子句。

&#13;
&#13;
URIError
&#13;
&#13;
&#13;

答案 2 :(得分:0)

为什么不能使用

if(typeof(JSON.search(data, '//*[name="Gheorghe"]')) !== 'undefined') {
  result = JSON.search(data, '//*[name="Gheorghe"]');
}
else {
  //something else
}

答案 3 :(得分:0)

Defiant.js,第三方图书馆应该处理这个问题。我承认他们不是。

在这种情况下,有两种方法可以解决这个问题。

  1. 要修改库以在未找到结果时返回undefined - 建议不要这样做,因为对于正在处理代码库的其他开发人员以及使用bower /维护库的版本控制将会有问题NPM。

  2. 使用try catch实现 - 这是解决此问题的理想方法,因为您不必对第三方库进行更改,您可以轻松触发以检查是否存在try块中的错误等于"Cannot read property 'Gheorghe' of undefined",您可以运行首选回调。

  3. 这是我建议的解决方案。

    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);
    }