Javascript通过URL传递JSON
function toParameter(obj){ if(obj instanceof Number || obj instanceof String || obj instanceof Boolean){ return obj.valueOf(); } var arr = [], arrStr, arrlen, i; if(obj instanceof Array){ arrlen = obj.length; for(i = 0; i < arrlen; i++){ if(typeof obj[i] == 'string' || typeof obj[i] == 'number' || typeof obj[i] == 'boolean'){ arr.push(obj[i]); }else if(obj[i] instanceof Array){ arr.push(encodeURIComponent(arguments.callee(obj[i]))); }else if(obj[i] instanceof Object){ //Array's instance is also a instance of Object arr.push(encodeURIComponent(arguments.callee(obj[i]))); }else{ } } return arr.join('@'); }else if(obj instanceof Object){ var name, value; for(name in obj){ switch(typeof obj[name]){ case 'string': case 'number': case 'boolean': value = obj[name]; break; case 'object': value = arguments.callee(obj[name]); break; case 'undefined': case 'function': value = ''; break; } arr.push(name + '=' + encodeURIComponent(value)); } return arr.join('&'); } } function parseParameter(url){ if(url.indexOf('@') > -1){ var arr = [], i, arrlen, resultArr = []; arr = url.split('@'); arrlen = arr.length; for(i = 0; i < arrlen; i++){ var str = decodeURIComponent(arr[i]); if(str.indexOf('=') < 0 && str.indexOf('@') < 0 && str.indexOf('&') < 0){ resultArr.push(str); }else{ var element = arguments.callee(str); var resultLen = resultArr.length; resultArr[resultLen] = element; //push just for string } } return resultArr; }else if(url.indexOf('&') > -1){ var arr = [], i, arrlen, obj = {}, oneKeyValue; arr = url.split('&'); arrlen = arr.length; for(i = 0; i < arrlen; i++){ oneKeyValue = arr[i]; oneKeyValue = oneKeyValue.split('='); var name = oneKeyValue[0]; var value = decodeURIComponent(oneKeyValue[1]); if(value.indexOf('&') > -1 || value.indexOf('@') > -1 || value.indexOf('=') > -1){ value = arguments.callee(value); } obj[name] = value; } return obj; } }
//测试用例1 var json = [{ aaa : 'aaaa1', bbb : 323 }, { aaa : 'aaaa2', bbb : [ 'b22', 2, true ] }];
//测试用例2 var obj = [[1, 'aa'],[2,'bb'],{c : 3, d : ['d1', 'd2']}]; var url = toParameter(obj); var aa = parseParameter(url); alert(aa);
- 上一篇 »JavaScript深入之参数按值传递
- 下一篇 »javascript之JSON引入