jQuery居然都没有JSON的decode和encode,精确类型判断也没有,囧……自己动手写吧!不过这些东西在网上都已经有很好的版本了,自己也不用太费脑筋,拿来用吧!类型判断在这里有一段很好的代码:http://lucassmith.name/pub/typeof.html,JSON的decode和encode就直接用Mootools的吧!(不过Mootools里面的JSON.encode方法还不够完美,我作了一些完善。)
- /**
- * extension of JSON, type for jQuery
- * AUTHOR: xushengs@gmail.com
- * LICENSE: http://www.opensource.org/licenses/mit-license.php
- * WEBSITE: http://fdream.net/
- */
- (function($) {
- // the code of this function is from
- // http://lucassmith.name/pub/typeof.html
- $.type = function(o) {
- var _toS = Object.prototype.toString;
- var _types = {
- 'undefined': 'undefined',
- 'number': 'number',
- 'boolean': 'boolean',
- 'string': 'string',
- '[object Function]': 'function',
- '[object RegExp]': 'regexp',
- '[object Array]': 'array',
- '[object Date]': 'date',
- '[object Error]': 'error'
- };
-
- return _types[typeof o] || _types[_toS.call(o)] || (o ? 'object' : 'null');
- };
-
- // the code of these two functions is from mootools
- // http://mootools.net
- var $specialChars = { '\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"': '\\"', '\\': '\\\\' };
- var $replaceChars = function(chr) {
- return $specialChars[chr] || '\\u00' + Math.floor(chr.charCodeAt() / 16).toString(16) + (chr.charCodeAt() % 16).toString(16);
- };
-
- $.toJSON = function(o) {
- var s = [];
- switch ($.type(o)) {
- case 'undefined':
- return 'undefined';
- break;
- case 'null':
- return 'null';
- break;
- case 'number':
- case 'boolean':
- case 'date':
- case 'function':
- return o.toString();
- break;
- case 'string':
- return '"' + o.replace(/[\x00-\x1f\\"]/g, $replaceChars) + '"';
- break;
- case 'array':
- for (var i = 0, l = o.length; i < l; i++) {
- s.push($.toJSON(o[i]));
- }
- return '[' + s.join(',') + ']';
- break;
- case 'error':
- case 'object':
- for (var p in o) {
- s.push(p + ':' + $.toJSON(o[p]));
- }
- return '{' + s.join(',') + '}';
- break;
- default:
- return '';
- break;
- }
- };
-
- $.evalJSON = function(s) {
- if ($.type(s) != 'string' || !s.length) return null;
- return eval('(' + s + ')');
- };
- })(jQuery);