json_encode和serialize(二)

来源:互联网 发布:公务员考试试题软件 编辑:程序博客网 时间:2024/05/22 01:30

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,先留一个坑。



0 0
原创粉丝点击