淘先锋技术网

首页 1 2 3 4 5 6 7

简介

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":
}
{
"name":"LiNan",
"age":,
"school":{
        "location":"North"
    }
}

数组

[,,"hello world"]

解析与序列化

JSON对象

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

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

序列化

注意:

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

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

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

简单序列化

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

结果
这里写图片描述

序列化选项

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

1.过滤结果

(1)数组形式

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

结果
这里写图片描述

(2)函数形式

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

结果
这里写图片描述

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

结果
这里写图片描述

3.toJSON()

自定义序列化JavaScript对象

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

结果
这里写图片描述

4.序列化顺序

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

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

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

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

解析

简单解析

  var book = {
            title:"aaa",
            authors:["xiaoming"],
            edition:,
            year:,
        };
        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:,
            year:,
            releaseDate:new Date(,,)
        };
        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版)》