日期:2014-05-16  浏览次数:20329 次

前台Json与String相互转换解决方案

? ? Json格式在当前的Web项目开发中已经越来越重要,面对Json格式,我们时常需要将Json格式的数据转换成字符串形式,或者将字符串形式的数据转换为Json对象的数据。

?

? ? 在Java后台中,这种相互转换的工具已经有很多,例如:org.json,fastjson,gson等等,不胜枚举。所以这里不对此进行探讨,这里主要给出一个在天台中进行json和string进行转换的解决方案。

?

Json转换帮助类:

var JsonUtils = function(){
	
	var cache = [];
			
	var _json2String = function(jsonObj){
				
		var type = typeof jsonObj;
				
		if('object' == type){
					
			if(Array == jsonObj.constructor){
				type = "array";
			}else if(RegExp == jsonObj.constructor){
				type = "regexp";
			}else{
				type = "object";
			}
		}
				
		switch(type){
			case 'undefined' :
			case 'unknown' :
				return;
			case 'function' :
			case 'boolean' :
			case 'regexp' :
				return jsonObj.toString();
			case 'number' :
				return isFinite(jsonObj) ? jsonObj.toString() : 'null';
			case 'string' :
				return '"' + jsonObj.replace(/(\\|\")/g, "\\$1").replace(/\n|\t|\r/g, function(){
							var a = arguments[0];
							return (a == '\n')? '\\n' : (a == '\r') ? '\\r' : (a == '\t') ? '\\t' : "";
						}) + '"';
			case 'object' :
				if(jsonObj === null)
					return 'null';
				var results = [];
				for(var property in jsonObj){
					if('parentNode' == property)
						continue;
					var value = _json2String(jsonObj[property]);
					if(value != undefined){
						var temp = _json2String(property);
						results.push(temp + ':' + value);
					}
				}
				return '{' + results.join(',') + '}';
			case 'array' :
				var results = [];
				for(var i = 0; i < jsonObj.length; i += 1){
					if(_isCache(jsonObj[i].tId)){
						continue;
					}else{
						cache.push(jsonObj[i].tId);
						var value = _json2String(jsonObj[i]);
						if(value !== undefined){
							results.push(value);
						}
					}
				}
				return '[' + results.join(',') + ']';
		}
	};
			
	var _isCache = function(currentId){
				
		for(var i = 0; i< cache.length; i += 1){
			if(currentId === cache[i] ){
				return true;
			}
		}
		return false;
	};
			
	var _jsonStr2JsonObj = function(jsonStr){
		try{
			return $.parseJSON(jsonStr);
		}catch(e){
			throw "parse json string error";
		}
	};
			
	return{
		jsonStr2JsonObj : function(jsonStr){
			return _jsonStr2JsonObj(jsonStr);
		},
				
		json2String : function(jsonObj){
			return _json2String(jsonObj);
		}
	};
		
}();
?

测试代码:

var json = {'id' : '123'};
var jsonStr = JsonUtils.json2String(json);
alert(jsonStr);
?

?