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;
			})||{};
	}
时间: 2024-11-05 23:22:53

JSON对象克隆(JSON对象序列化)(支持function)的相关文章

Java提高篇——对象克隆(复制)

阅读目录 为什么要克隆?如何实现克隆浅克隆和深克隆解决多层克隆问题总结 假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short,float,double.long)同样适用于该类情况. 但是如果你复制的是一个对象,情况就有些复杂了. 假设说我是一个beginner,我会这样写: class Student { private int number; pu

对象克隆

对象克隆又称为对象复制,从一个对象克隆出另一个新对象,新对象的属性值和原来相同.相当于new一个对象,然后将属性一个个赋给新对象,只不过我们可以使用clone方法来取代这个过程.根据克隆深度的不同,分为如下 克隆实现分为三步 1. 需要克隆的对象实现Cloneable接口,Cloneable只是一个标志,没有任何需要实现的方法 2. 在该对象中重写父类的clone方法 2. 在clone方法中调用super.clone(),实际是调用Object中的clone方法 1. 浅层复制 浅层复制指只克

Java 对象克隆

首先,我们需要知道的是,什么是对象克隆?对象克隆是当程序运行时,可能需要一个新对象,用来保存当前对象的状态,并且新的对象与当前对象没有任何关联,即我改变了新对象属性的值,而当前对象没有发生改变.而这新的对象,就是对当前对象的克隆,或者说拷贝. 要完成对象克隆,有以下要求: 1. 新的对象与当前对象值相同 2. 新的对象与当前对象的引用地址不同 要实现对象克隆,有以下步骤: 1. 对要被对象克隆的对应类继承Cloneable接口,并重载clone方法,将访问权限改成public 2. 将当前对象的

将任意一个jQuery对象进行表单序列化,免除了提交请求时大量拼写表单数据的烦恼,支持键值对<name&value>格式和JSON格式。

http://zhengxinlong.iteye.com/blog/848712 将任意一个jQuery对象进行表单序列化,免除了提交请求时大量拼写表单数据的烦恼,支持键值对<name&value>格式和JSON格式. /// <reference name="jquery.js" description="1.3.2版本以上" /> /*!* 扩展jQuery表单序列化函数:{ Version: 1.2, Author: Eric

转载C# 对象转Json序列化

转载原地址:  http://www.cnblogs.com/plokmju/p/ObjectByJson.html JSON Json(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JS的一个子集. Json采用完全独立于语言的文本格式.这使得Json成为理想的数据交换语言.易于人阅读和编写,同时也易于机器解析和生成. Json简单来说就是JS中的对象和数组,所以Json也存在两种结构:对象.数组. Json对象:Json对象定义在花括号“{}”内,

【荐】使用eval()、new Function()将JSON字符串转换为JSON对象

在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 第一种解析方式:使用eval函数来解析,并且使用jQuery的each方法来遍历 用jQuery解析JSON数据的方法,作为jQuery异步请求的传输对象,jQuery请求后返回的结果是json对象,这里考虑的都是服务器返回JSON形式的字符串的形式,对于利用JSONObject等插件封装的JSON对象,与此亦是大同小异,这里不再做说明. 这里首先

C#--对象转Json序列化

C#--对象转Json序列化 前言 最近在研究Android项目,其中涉及到Android中解析Json数据的问题,需要模拟网络中传递Json数据的模式,因为以前是.net的工程师,所以想着从.net的平台开发服务,传递Json格式的数据.那么先来介绍一些什么是JSON. Json(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JS的一个子集. Json采用完全独立于语言的文本格式.这使得Json成为理想的数据交换语言.易于人阅读和编写,同时也易于机器

JavaScript - 问题集 - 含function的json对象与json字符串之间相互转换

基本的转换为:JSON.parse与JSON.stringify. 但是json数据中含function,则转换后,function会丢失,如: var json={ test:'test', login: function(){ alert("login") } } 经JSON.stringify后,login丢失. var json={ test:'test' } JSON.parse,结果一样. 正确处理方法: // json对象转换成字符串 var s=JSON.stringi

利用fastjson序列化对象为JSON

利用fastjson序列化对象为JSON 参考博客:http://blog.csdn.net/zeuskingzb/article/details/17468079 Step1:定义实体类 //用户类 public class User { private Long id; private String name; //增加get/set方法 } //定义组,1组有多个用户 public class Group { private Long id; private String name; pr