感觉一讲到序列化,可能是由于java用的比较习惯的原因。。。(ps:虽然还是一名渣渣)马上就想到的是java中使用的序列化,比如实现serializable接口。今天在使用javascript中的时候,才发现序列化也可以在js中用到,真的是目光短浅。。。一声长叹。。。哎。。。。。接下来正文:
最长用到的是,把js的对象进行序列化为字符串进行存储,然后再反序列化为对象。额,就是这么绕口。那么在接下来就开始上代码了:
1.序列化:JSON.stringify()
2.反序列化:JSON.parse()
举个栗子:
var temp={"key":"nickname","value":"昵称"};
var str=JSON.stringify(temp);//序列化一下下
我们打印str来look<img alt="微笑" src="http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif" />look:如下
可以明显的看到是一个字符串喽(两边加了""),那么我们就可以按照String的方式来随意搞它。。。当你再次想使用“对象”来搞的时候,在反序列回来。
var b=JSON.parse(str);//在使用parse反序列化look<img alt="微笑" src="http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif" />look
明显看到是一个object。。。
可能你会问,讲了半天有卵用。。。那我告诉你,你没有使用的时候,也真的是没有卵用,但是我还真的用到这玩意了,在讲一个列子吧。。。(有点泄露公司机密了,希望没有人看到哦)
首先,给了一个数组,内容是:
var test=[{"key":"nickname","value":"昵称"},{"key":"phone","type":"WORK","value":"18621016200"},{"key":"phone","type":"test","value":"test"},{"key":"phone","type":"CELL","value":"18621016200"}]
看到这么多个相同的iphone(多了个i),一会有用到。
接下来,要求你按照给定的格式,写一个js函数,来把上面的数组转化一下下喽。
格式如下:
/*目标格式
{
key1 : {
key : xxx,
value : xxx,
... : ...
}
or
key2 : [//多个key值相同存数组
{
key : xxx,
value : xxx,
xxx : xxx
},
{
},
...
]
}
*/
看不懂吗??怪我喽,自己看去。
接下来写一个函数,苦思冥想半天,搞出来了:
function json2obj(a)
{
var content={}, temp="";
for(var obj in a)
{
temp=a[obj].key;
if(content[temp]==null)//都是单个的key值撒。。。
{
content[temp]=a[obj];
}
else if(content[temp].length>1){
var tempstr2=JSON.stringify(a[obj]);//判断是否已经有相同的key值存在,且已经超过两个
content[temp].push(JSON.parse(tempstr2));
}
else
{//判断是否有相同的key值存在,转换为数组存储咯
var tempstr=JSON.stringify(content[temp]);
var tempstr2=JSON.stringify(a[obj]);
content[temp]=[JSON.parse(tempstr)];
content[temp].push(JSON.parse(tempstr2));
}
}
}
可能写的不是很完美,希望大神们轻喷。。。
总结完了,下班休息。。。后续更新,敬请期待。。。