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