你如何在jQuery 1.9.1中使用$ .parseJSON?
我正在使用此函数来测试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?
这部分代码:
var test = ['thing1','thing2','thing3'];
创建一个数组而不是包含有效JSON表达式的字符串。 它似乎与1.8.3 一起工作的原因是因为当时parseJSON
看起来像这样:
function( data ) { if ( !data || typeof data !== "string") { return null; } // ... }
如您所见,如果您将数组作为第一个参数传递,它将返回null
; 它不会抛出exception。
然后你的函数返回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()
将抛出exception。
一个有效的表达式是这样的:
'["thing1","thing2","thing3"]'
去测试:
> JSON.parse('["thing1","thing2","thing3"]') ["thing1", "thing2", "thing3"]
我认为这与你说的相反:在jQuery / 1.8中它没有按预期工作,因为无效的JSON字符串使$.parseJSON()
返回null
。 但是,在jQuery / 1.9中它会引发exception。
根据API文档 :
传入格式错误的JSON字符串可能会导致抛出exception
所以你不能依赖那种行为。 您还需要测试返回值。
您的“test”变量根本不是有效的JSON字符串; 它是一个JavaScript数组。
这是一个固定版本,其中值是JSON字符串。
var test = '["thing1","thing2","thing3"]';
现在,有趣的是,1.8.3不会这样做,我承认。 研究时间……
好的,在1.9之前, $.parseJSON()
代码会很快为非字符串参数值返回null
。 现在,它就像快速推迟使用本机JSON.parse()
,并且因为它会在非字符串,非空参数上抛出错误,所以现在就会得到exception。