JSON对象克隆(JSON对象序列化)(支持function)

工作中碰到需要将JSON对象序列化保存到SessionStorage中,所以自己写了3个方法:克隆JSON对象、将JSON对象序列化保存和读取的方法。


	
	var JSON_SERIALIZE_FIX = {
		PREFIX : "[[JSON_FUN_PREFIX_",
		SUFFIX : "_JSON_FUN_SUFFIX]]"
	};

	/**
	 * 根据Key从sessionStorage中获取JSON对象数据
	 * @param key 保存的主键
	 * @param type key的附加值(可选)
	 */
	function getSessionJSONItem(key,type){
		if(type){
			key = key+"_"+type;
		}
		return JSON.parse(sessionStorage.getItem(key),function(key, value){
			if(typeof value === 'string' && 
					value.indexOf(JSON_SERIALIZE_FIX.SUFFIX)>0 && value.indexOf(JSON_SERIALIZE_FIX.PREFIX)==0){
					return eval("("+value.replace(JSON_SERIALIZE_FIX.PREFIX,"").replace(JSON_SERIALIZE_FIX.SUFFIX,"")+")");
				}
				return value;
			})||{};
	}	
	
	/**
	 * 保存JSON对象数据至sessionStorage中
	 */	
	function setSessionJSONItem(key,obj,type){
		if(type){
			key = key+"_"+type;
		}
		sessionStorage.setItem(key,JSON.stringify(obj,function(key, value){
			if(typeof value === 'function'){
				return JSON_SERIALIZE_FIX.PREFIX+value.toString()+JSON_SERIALIZE_FIX.SUFFIX;
			}
		    return value; 
		}));
	}
	/**
	 * 克隆一个JSON对象(支持function)
	 * @param obj json对象
	 */
	function cloneJSON(obj){
		var sobj = JSON.stringify(obj,function(key, value){
			if(typeof value === 'function'){
				return JSON_SERIALIZE_FIX.PREFIX+value.toString()+JSON_SERIALIZE_FIX.SUFFIX;
			}
		    return value; 
		});
		return JSON.parse(sobj,function(key, value){
			if(typeof value === 'string' && 
					value.indexOf(JSON_SERIALIZE_FIX.SUFFIX)>0 && value.indexOf(JSON_SERIALIZE_FIX.PREFIX)==0){
					return eval("("+value.replace(JSON_SERIALIZE_FIX.PREFIX,"").replace(JSON_SERIALIZE_FIX.SUFFIX,"")+")");
				}
				return value;
			})||{};
	}


你可能感兴趣的:(javascript)