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;
			})||{};
	}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WJL_MGQS

本不富裕的收入,还得买服务器

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值