JSON

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

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

1 jQuery parseJSON( data )方法jQuery parseJSON( data )接受一个格式良好的JSON字符串,返回解析后的JavaScript对象。如果传入残缺的JSON字符串可能导致程序抛

> Javascript > jQuery技术内幕:深入解析jQuery架构设计与实现原理 2.8.3 解析JSON和XML:jQuery.parseJSON( data )、jQuery.parseXML( data ) 2014-01-21 13:27:44         我要投稿   

本文所属图书 > jQuery技术内幕:深入解析jQuery架构设计与实现原理

本书由阿里巴巴资深前端开发工程师撰写,从源代码角度全面而系统地解读了jQuery的17个模块的架构设计理念和内部实现原理,旨在帮助读者参透jQuery中的实现技巧和技术精髓,同时本书也对广大开发者如何通过阅读源  立即去当当网订购

1.jQuery.parseJSON( data )

方法jQuery.parseJSON( data )接受一个格式良好的JSON字符串,返回解析后的JavaScript对象。如果传入残缺的JSON字符串可能导致程序抛出异常;如果不传入参数,或者传入空字符串、null、undefined,则返回null。

如果浏览器提供了原生方法JSON.parse(),则使用该方法解析JSON字符串;否则使用
( new Function( "return"+ data ) )()解析JSON字符串。

方法jQuery.parseJSON( data )的相关代码如下所示:
555      parseJSON: function( data ) {
556         if ( typeof data !== "string" || !data ) {
557             return null;
558         }
559
560         // Make sure leading/trailing whitespace is removed (IE can't handle it)
561         data = jQuery.trim( data );
562
563         // Attempt to parse using the native JSON parser first
564         if ( window.JSON && window.JSON.parse ) {
565             return window.JSON.parse( data );
566         }
567
568         // Make sure the incoming data is actual JSON
569         // Logic borrowed from json.org/json2.js
570         if ( rvalidchars.test( data.replace( rvalidescape, "@" )
571             .replace( rvalidtokens, "]" )
572             .replace( rvalidbraces, "")) ) {
573
574             return ( new Function( "return " + data ) )();
575
576         }
577         jQuery.error( "Invalid JSON: " + data );
578      },

第556~561行:对于非法参数一律返回null。如果参数data不是字符串,或者可以转换为false,则返回null。

第561行:移除开头和末尾的空白符。在IE 6/7中,如果不移除就不能正确的解析,例如:
typeof ( new Function( 'return ' + '\n{}' ) )();
// 返回"undefined"

第564~566行:尝试使用原生方法JSON.parse()解析JSON字符串,并返回。

JSON对象含有两个方法:JSON.parse()和JSON.stringify(),用于JSON字符串和JavaScript对象之间的相互转换。下面是它们的语法和使用示例。

JSON.parse()解析JSON字符串为 JSON对象,其语法如下:
JSON.parse(text[, reviver])
// text 待解析为 JSON 对象的字符串
// reviver 可选。在返回解析结果前,对解析结果中的属性值进行修改
JSON.parse()的使用示例如下所示:
JSON.parse( '{ "abc": 123 }' );
// {"abc": 123 }

JSON.parse( '{ "abc": 123 }', function( key, value ){
   if( key === '' ) return value;
   return value * 2;
} );
// {"abc": 246 }

JSON.stringify()转换JSON对象为JSON字符串,其语法如下:
JSON.stringify( value[, replacer [, space]] )
// value 待转换为 JSON 字符串的对象
// replacer 可选。如果 replacer 是函数,转换前先执行 replacer 改变属性值,如果函数 replacer 返回 undefined,则对应的属性不会出现在结果中;如果 replacer 是数组,指定最终字符串中包含的属性集合,不在数组 replacer 中的属性不会出现在结果中
// space 增加转换后的 JSON 字符串的可读性

JSON.stringify()的使用示例如下所示:
JSON.stringify( { a: 1, b: 2 } );
// '{"a":1,"b":2}'

JSON.stringify( { a: 1, b: 2 }, function( key, value ){
   if( key === '' ) return value;
   if( key === 'a' ) return value * 10;
   if( key === 'b' ) return undefined;
   return value;
} );
// '{"a":10}'

JSON.stringify( { a: 1, b: 2 }, ['b'] );
// '{"b":2}'

JSON.stringify( { a: 1, b: 2 }, null, 4 );
// '{\n    "a": 1,\n    "b": 2\n}'

JSON对象、JSON.parse()、JSON.stringify()在ECMAScript 5中被标准化,IE 8以下的浏览器不支持。关于JSON规范和浏览器实现的更多信息请访问以下地址:

(ECMAScript 5第15.12节)

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON
下面回到对方法jQuery.parseJSON()的分析中来。

 

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

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

    1.2.6 在Java中使用JSON

    2015-10-08 10:22

网友点评