昨天用js写了一个Json_encode的工具函数,附上模仿jQuery并加强的extend函数。
对于extend函数,主要加强的是可以遍历子对象来extend,而不是简单的覆盖。
getJSON的使用方法:
1 2 |
jlUtil.getJSON(obj:Object [, skip_arr:Array]) //skip_arr指定要忽略的键名 |
extend的使用方法:
1 2 3 4 |
jlUtil.extend(obj:Object [, obj2:Object...]) //这个函数需要jQuery //如果只带一个参数,则这个obj将被extend到jlUtil本身 //如果带两个以上的参数,则第2个及以后的参数将被extend到第一个参数 |
下面是代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
var jlUtil = { getJSON: function(obj, skip_arr){ if(typeof obj == "number" || typeof obj == "boolean"){ return obj; }else if(typeof obj == "string"){ return "'" + obj.replace("'","\\'") + "'"; } var json = []; skip_arr = skip_arr ? skip_arr : []; for(var key in obj){ //skip function and the keys in skip arr if(obj[key].constructor == Function || skip_arr.indexOf(key) != -1){ continue; } //in Array loop if(!isNaN(parseInt(key)) || key.constructor != String){ json.push(jlUtil.getJSON(obj[key], skip_arr)); continue; } //else recurrency json.push("'" + key + "':" + jlUtil.getJSON(obj[key], skip_arr)); } if (obj.constructor == Array) { return "[" + json.join(",") + "]"; } else { return "{" + json.join(",") + "}"; } }, extend: function(obj){ if (arguments.length == 1) { this.extend(this, obj); return this; }else if(arguments.length >= 2){ var dst = arguments[0]; //extend the rest args to args[0] for(var i=1; i<arguments.length; ++i){ for(var item in arguments[i]){ var tmp = arguments[i][item]; if(typeof arguments[i][item] == "object"){ //make a copy while is a object, needs jQuery here var tmp = $.extend({}, arguments[i][item]); } //if is object try recurrency if(dst[item] && typeof dst[item] == "object"){ try{ this.extend(dst[item], tmp); }catch(e){ dst[item] = tmp; } }else{ dst[item] = tmp; } } } return dst; } } }; |