JSON对象克隆(JSON对象序列化)(支持function),json序列化
工作中碰到需要将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;
})||{};
}