你如何在jQuery 1.9.1中使用$ .parseJSON?

时间:2013-02-26 15:49:35

标签: jquery json

我正在使用此函数来测试JSON对象的有效性:

function is_JSON( test ) {
    try { var c = $.parseJSON( test );
    } catch (e) { return false; }
    return true;
}

使用jQuery 1.8.3 ...

,你可以看到它在这里工作得很好

http://jsfiddle.net/xZYVY/

...但如果你切换到jQuery 1.9.1,这不起作用!

http://jsfiddle.net/xZYVY/1/

我错过了什么?有没有更好的方法来测试有效的JSON?

3 个答案:

答案 0 :(得分:3)

这部分代码:

var test = ['thing1','thing2','thing3'];

创建一个数组而不是包含有效JSON表达式的字符串。 似乎与1.8.3一起工作的原因是因为当时parseJSON看起来像这样:

function( data ) {
if ( !data || typeof data !== "string") {
        return null;
    }
    // ...
}

如您所见,如果您将数组作为第一个参数传递,它将返回null;它没有抛出异常。

然后您的函数返回true

parseJSON: function is_JSON( test ) {
    try { var c = $.parseJSON( test );
    } catch (e) { return false; }
    // c === null
    return true;
}

从1.9开始,这就是parseJSON的样子:

parseJSON: function( data ) {
    // Attempt to parse using the native JSON parser first
    if ( window.JSON && window.JSON.parse ) {
        return window.JSON.parse( data );
    }

    if ( data === null ) {
        return data;
    }
    if ( data === null ) {
        return data;
    }
    // etc.

如果传递的参数不是有效的JSON表达式,window.JSON.parse()将抛出异常。

有效的表达式是:

'["thing1","thing2","thing3"]'

测试:

> JSON.parse('["thing1","thing2","thing3"]')
["thing1", "thing2", "thing3"]

答案 1 :(得分:1)

您的“test”变量根本不是有效的JSON字符串;它是一个JavaScript数组。

Here is a fixed version where the value is a JSON string.

 var test = '["thing1","thing2","thing3"]';

现在,有趣的是,1.8.3不会这样做,我承认。研究时间......

好的,在1.9之前,$.parseJSON()代码会很快返回null非字符串参数值。现在,它就像快速推迟到本机JSON.parse()一样,并且由于这会在非字符串,非空参数上引发错误,所以现在就会得到异常。

答案 2 :(得分:1)

我认为这与你说的相反:在jQuery / 1.8中,它没有按预期工作,因为无效的JSON字符串使$.parseJSON()返回null。但是,在jQuery / 1.9中,它确实会抛出异常。

根据API documentation

  

传入格式错误的JSON字符串可能会导致抛出异常

所以你不能依赖那种行为。您还需要测试返回值。

相关问题