浏览 6050 次
锁定老帖子 主题:新API解析JSON---Ajax之七
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-08-16
最后修改:2010-08-18
ECMAScript 5发布有段时间了,其中就包括了解析JSON的原生API-JSON.parse。许多浏览器已经支持了。
result = function(str){ try{ return JSON.parse(str); }catch(e){ try{ return (new Function('return ' + str))(); }catch(e){ failure(xhr,'parse json error',e); } } }(xhr.responseText); 源码见附件
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-08-18
这篇是接着上一篇的帖子的吗,多总结一点东西出来,让我们这些新手多学点。
|
|
返回顶楼 | |
发表时间:2010-08-18
不错,不错,又学到东西了,谢谢
|
|
返回顶楼 | |
发表时间:2010-08-19
用try/catch性能会受影响,想要判断是否有JSON.parse方法,不如直接用if语句
if(JSON.parse){ ... } else { ... } |
|
返回顶楼 | |
发表时间:2010-08-19
最后修改:2010-08-19
magicbu 写道 用try/catch性能会受影响,想要判断是否有JSON.parse方法,不如直接用if语句
if(JSON.parse){ ... } else { ... } 谢谢你的提醒。 曾经也纠结过用特性判断还是try catch。 既然语言本身提供了try catch,必要的时候还是可以用的,虽然某些大牛强调禁用trycatch,甚至写进了“开发规范”。 这里考虑更大的兼容性,比如"{age:28}"用JSON.parse不能成功解析会报异常,这样就跳到了catch中,catch使用new Function解析,可以解析成功。当然如果age加上引号是没问题的。 |
|
返回顶楼 | |
发表时间:2010-08-19
最后修改:2010-08-19
zhouyrt 写道 magicbu 写道 用try/catch性能会受影响,想要判断是否有JSON.parse方法,不如直接用if语句
if(JSON.parse){ ... } else { ... } 谢谢你的提醒。 曾经也纠结过用特性判断还是try catch。 既然语言本身提供了try catch,必要的时候还是可以用的,虽然某些大牛强调禁用trycatch,甚至写进了“开发规范”。 这里考虑更大的兼容性,比如"{age:28}"用JSON.parse不能成功解析会报异常,这样就跳到了catch中,catch使用new Function解析,可以解析成功。当然如果age加上引号是没问题的。 看了一下jQuery的源码,它的parseJSON方法可能更好些~ parseJSON: function( data ) { if ( typeof data !== "string" || !data ) { return null; } // Make sure leading/trailing whitespace is removed (IE can't handle it) data = jQuery.trim( data ); // Make sure the incoming data is actual JSON // Logic borrowed from http://json.org/json2.js if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@") .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]") .replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) { // Try to use the native JSON parser first return window.JSON && window.JSON.parse ? window.JSON.parse( data ) : (new Function("return " + data))(); } else { jQuery.error( "Invalid JSON: " + data ); } }, |
|
返回顶楼 | |
发表时间:2010-08-20
/^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@") .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]") .replace(/(?:^|:|,)(?:\s*\[)+/g 这个正则表达式 |
|
返回顶楼 | |
发表时间:2010-08-20
这个也是从json官网弄来的吧
|
|
返回顶楼 | |
发表时间:2010-08-21
特殊字符能处理吗?
|
|
返回顶楼 | |