JSON解析与序列化

来源:互联网 发布:酷家乐衣柜设计软件 编辑:程序博客网 时间:2024/05/22 09:03

简介

1.JSON:JavaScript Object Notation 对象表示法

2.JSON目前是JavaScript中读写结构化数据最好的方式

3.JSON是一种数据格式,并不是一种编程语言

语法

简单值

1.最简单的JSON数据形式就是简单值,比如5,“Hello World!”

2.JSON字符串必须使用双引号

对象

1.与JavaScript的对象字面量的区别:

(1)没有声明对象

(2)没有末尾的分号

(3)属性名要加双引号

例如:

{"name":"LiNan","age":29}
{"name":"LiNan","age":29,"school":{        "location":"North"    }}

数组

[23,26,"hello world"]

解析与序列化

JSON对象

1.stringify():把JavaScript对象序列化为JSON字符串

2.parse():把JSON字符串解析为原生JavaScript值

序列化

注意:

(1)序列化JavaScript对象时,所有函数和原型成员被忽略

(2)值为undefined的任何属性被跳过

(3)最终值为有效的JSON数据类型的实例属性

简单序列化

   var book = {            title:"aaa",            authors:["xiaoming"],            edition:3,            year:2011        };        var jsonText = JSON.stringify(book);        alert(jsonText.toString());

结果
这里写图片描述

序列化选项

JSON.stringify()除了要序列化的JavaScript对象外,可以另外接收两个参数,第一个是过滤器,以不同形式序列化JavaScript对象。第二个是选项,表示是否在JSON字符串中保留缩进

1.过滤结果

(1)数组形式

  var book = {            title:"aaa",            authors:["xiaoming"],            edition:3,            year:2011        };        var jsonText = JSON.stringify(book,["title","edition"]);        alert(jsonText.toString());

结果
这里写图片描述

(2)函数形式

var book = {            title:"aaa",            authors:["xiaoming"],            edition:3,            year:2011        };        var jsonText = JSON.stringify(book,function (key,value) {            switch (key){                case "authors":                    return value.join(",");                case "year":                    return 1000;                case "edition":                    return undefined;                default:                    return value;            }        });        alert(jsonText.toString());//一定要提供default值,保证其他值能够正常出现在结果中

结果
这里写图片描述

2.字符串缩进
 var book = {            title:"aaa",            authors:["xiaoming"],            edition:3,            year:2011        };        var jsonText = JSON.stringify(book,null,4);//每个级别缩进4个空格        alert(jsonText.toString());

结果
这里写图片描述

3.toJSON()

自定义序列化JavaScript对象

 var book = {            title:"aaa",            authors:["xiaoming"],            edition:3,            year:2011,            toJSON:function () {                return this.title;            }        };        var jsonText = JSON.stringify(book,null,4);        alert(jsonText.toString());

结果
这里写图片描述

4.序列化顺序

(1)如果toJSON()存在并且返回有效值,则调用该方法,否则返回对象本身

(2)如果提供第二个参数,应用这个函数过滤器。传入值为第(1)步返回的值

(3)对第(2)步返回的值进行序列化

(4)如果提供第三个参数,执行相应的格式化

解析

简单解析

  var book = {            title:"aaa",            authors:["xiaoming"],            edition:3,            year:2011,        };        var jsonText = JSON.stringify(book);        var bookCopy = JSON.parse(jsonText);        for(var key in bookCopy){            console.log(key.toString()+":"+bookCopy[key]);        }

结果
这里写图片描述

解析选项

 var book = {            title:"aaa",            authors:["xiaoming"],            edition:3,            year:2011,            releaseDate:new Date(2011,11,1)        };        var jsonText = JSON.stringify(book);        var bookCopy = JSON.parse(jsonText,function (key,value) {            if(key=="releaseDate"){                return new Date(value);            }else{                return value;            }        });        for(var key in bookCopy){            console.log(key.toString()+":"+bookCopy[key]);        }        console.log(bookCopy.releaseDate.getFullYear());

结果
这里写图片描述

总结

(1)JSON是一个轻量级的数据格式,可以简化表示复杂数据结构的工作量

(2)JSON.stringify()和JSON.parse()分别用来将对象序列化为JSON字符串和将JSON数据解析为JavaScript对象

(3)原生JSON目前得到很多浏览器的支持

参考

《JavaScript高级程序设计(第3版)》

0 0
原创粉丝点击