JSON

2.8.3 解析JSON和XML:jQuery.parseJSON( data )、jQuery.parseX(2)

字号+ 作者:H5之家 来源:H5之家 2017-01-22 14:04 我要评论( )

第570~576行:在不支持JSON.parse()的浏览器中,先检查字符串是否合法,如何合法,才会执行( new Function(return+ data) )()并返回执行结果。检查字符串是否合法的正则和逻辑来自开源JSON解析库json2.js(https:/

第570~576行:在不支持JSON.parse()的浏览器中,先检查字符串是否合法,如何合法,才会执行( new Function("return"+ data) )()并返回执行结果。检查字符串是否合法的正则和逻辑来自开源JSON解析库json2.js(https://github.com/douglascrockford/JSON-js),检测过程分为4步,用到了4个正则表达式:rvalidchars、rvalidescape、rvalidtokens、rvalidbraces,相关代码如下:
 53     // JSON RegExp
 54     rvalidchars = /^[\],:{}\s]*$/,
 55     rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
 56     rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
 57     rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,

570         if ( rvalidchars.test( data.replace( rvalidescape, "@" )
571             .replace( rvalidtokens, "]" )
572             .replace( rvalidbraces, "")) ) {

第54~57行:正则rvalidescape用于匹配转义字符;正则rvalidtokens用于匹配有效值(字符串、true、false、null、数值);正则rvalidbraces用于匹配正确的左方括号“[”;正则rvalidchars用于检查字符串是否只含有指定的字符(“]”、“,”、“:”、“{”、“}”、“\s”)。

第570~572行:先利用正则rvalidescape把转义字符替换为“@”,为进行下一步替换做准备;再利用正则rvalidtokens把字符串、true、false、null、数值替换为“]”;然后利用rvalidbraces删除正确的左方括号;最后检查剩余字符是否只包含“]”、“,”、“:”、“{”、“}”、“\s”,如果只包含这些字符,那么认为JSON字符串是合法的。
第574行:通过构造函数Function()创建函数对象,然后执行。构造函数Function()的语法如下:
new Function( arguments_names..., body)
// 参见arguments_names...:任意多个字符串参数,每个字符串命名一个或多个要创建的 Function 对象的参数
// 参见body:一个字符串,指定函数的主体,可以含有任意多条 JavaScript 语句,这些语句之间用分号隔开,可以给该构造函数引用前面的参数设置的任何参数名
// 返回新创建的 Function 对象。调用该函数,将执行 body 指定的 JavaScript 代码
第577行:如果浏览器不支持JSON.parse(),并且JSON字符串不合法,则在最后抛出一个异常。

点击复制链接 与好友分享!回本站首页 您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力   上一篇:6.jQuery.isEmptyObject( object ) 下一篇:2.jQuery.parseXML( data ) 相关文章

1.2 Node.js 能做什么

1.4.2 Node.js 与PHP + Nginx

1.5.2 Java 与Javascript

1.6.2 CommonJS 规范与实现

1.1.2 算术

1.2 变量

1.3.2 prompt和confirm

1.4.2 while循环与do循环

1.5.2 自动类型转换

2.1 剖析函数定义

图文推荐

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 1.2.6 在Java中使用JSON

    1.2.6 在Java中使用JSON

    2015-10-08 10:22

网友点评