4 json和js的序列化
紧接之前的第一篇博客,按照链式的学习方法,我自然的想到了php有序列化,那么,js的序列化呢。由此查阅资料得出以下自己的几个总结和理解:
(1)首先,理解json,关于json。最重要的是要明白,json是一种数据格式,不是一种编程语言,虽然具有相同的语法形式,但是json并不从属于js。并且不是只有js才能使用json-》所以我明白了。为什么php也会有json_encode函数,因为对于php来说,这个函数是实现json数据格式的方法,而对于js来说JSON.stringify是属于js实现json格式的方法,当然,这两种语言之间的json格式是一样的,但是需要注意,json_encode会 将关联数组(包括含有显式的数值键名的数值型数组)和对象转换为json对象字符串,数值型数组则会转换为json数组。
$a=array(1,2,3,'fd');var_dump((json_encode($a)),"a");输出string(12) "[1,2,3,"fd"]" string(1) "a" 而$a=array(1=>1,2,3,'fd');var_dump((json_encode($a)),"a");输出string(28) "{"1":1,"2":2,"3":3,"4":"fd"}" string(1) "a" (2)json可以表示简单值,对象,数组三种数组类型,但是需要注意的是,json字符串必须一定要用双引号!!!!!与js对象字面对比,json对象有两个地方不一样,首先没有声明变量,其次没有末尾的分号,还有,对象的属性(属性哦哦)必须加双引号!!!!!!!!!!
js对象
var person={
name;"wang",
age: 20
} ;
json对象
{
"name":"wang",
"age":29
}
总而言之是,表示简单json字符串的时候,需要双引号,json对象属性的时候也需要双引号;
js数组
var value=[25,"hi"];
json数组
[25,"hi"]
(3)解析与序列化
json对象有两个方法 stringify()和parse()分别用于把js对象序列化为json字符串和把json字符串解析为原生的js值。
JSON.stringify()可以将js对象(对象哦)序列化为json字符串,这个函数有三个参数,第一个参数接收js对象,第二个参数可以是一个数组(表示需要转换的属性),或者一个函数,对转换的时候进行属性加工,第三个参数是一个选项,表示是否在json字符串中保留缩进(具体代码可以百度)。-》类似于php__sleep魔术方法对于serialzie串行化的时候进行过滤或者加工一样、
一个细节需要注意,进行序列化的时候,当值为undefined的任何属性都会被跳过。
<script type="text/javascript">var person={ name:undefined, age:23};var x=JSON.stringify(person);document.write(x);</script>输出为{"age":23}
同时还存在一个toJSON方法,可以为任何对象添加,返回其自身的json数据格式,即可以按照自己的需要返回一个自定义的字符串,这个时候调用JSON.stringify ()的时候会对返回的这个字符串进行操作。
<script type="text/Javascript">var person={ name:"test", age:23, toJSON:function(){ return this.name; }};var x=JSON.stringify(person);document.write(x);</script>输出"test"所以这个顺序是,先走toJSON方法,然后再走JOSN.stringify(),如果没有toJOSN()则直接对对象序列化,如果存在则对返回的数据序列化。
JSON.parse()方法可以接收两个参数,第一个参数是需要解析的还原的json字符串,第二个参数可以为一个函数,这个函数有两个参数分别对应键和值,从而可以实现对json字符串还原为对象时候的再操作。类似于php中unserialize的时候调用的__wakeUp魔术方法一样。
至此,由于看书看到php序列化而衍生想到的知识和学习的过程就到这结束了。今后的学习过程中还是需要按照这样的思维去学习,链式学习,每天积累,总有一天会成为大牛!加油!
由php的序列化而想到了js的序列化,虽然做了些总结,但是还有些疑问,感觉还可以更细致,对json更加详细的思考和总结留待下次再进行更深刻细致的挖掘,那个时候再从头回来再总结一次json,先留一个坑。
新闻热点
疑难解答