工作中碰到需要将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; })||{}; }
时间: 2024-11-05 23:22:53