首页 > 代码库 > 《javascript高级程序设计》笔记(二十)

《javascript高级程序设计》笔记(二十)

JSON

JSON是javascript的一个严格的子集,利用了javascript中的一些模式来表示结构化数据。JSON是在javascript中读写结构化数据的更好的方式。因为可以把JSON传给eval(),不用创建DOM对象。

(一)语法

 简单值: 字符串、数值、数组和null,不支持undefined。

 对象   :一组无序的键值对,可以是简单值,也可以是复杂数据类型的值。

 数组   :一组有序的值的列表,可以通过数值索引来访问其中的值,数组的值可以是任意类型。

 

1.简单值

字符串必须使用双引号

2.对象

{      "name" = "Nicolas",      "age" = 29,
"school": {
“name”:"Merrimack College",
"location":"North"
}}

没有声明变量

没有末尾的分号

对象的属性值必须加双引号

属性值可以是简单值,可以是复杂类型值

3.数组

 没有变量和分号

 

(二)解析与序列化

可以把JSON数据结构解析为有用的javascript对象。

1.JSON对象

 支持:IE8+  Firefox3.5+   Safari 4+   Chrome   Opera 10.5+ 较早版本可以使用一个shim。

stringify()    把javascript对象序列化为JSON字符串,不包含任何空格字符和缩进。

parse方法    把JSON字符串解析为原生javascript值。

 

2.序列化操作

 JSON.stringify()还可以接受两个参数,第一个参数是过滤器,可以是数组或函数,第二个参数表示是否在JSON字符串保留缩进。

 

①过滤结果

 如果过滤器参数是数组,结果只保留数组中的属性。

如果第二个参数是函数,传入的函数接收两个参数,属性名和属性值。如果函数返回undefined,相应属性会被忽略。

 

        var jsonText = JSON.stringify(book, function(key, value){            switch(key){                case "authors":                    return value.join(",")                                 case "year":                    return 5000;                                    case "edition":                    return undefined;                                    default:                    return value;            }        });

 

②字符串缩进

第三个参数控制缩进和空白符,如果是数字,表示每个级别缩进的空格数,所有大于10的值会转换为10。 

 var jsonText = JSON.stringify(book, null,4);

如果传入的不是数值,这个字符串会在JSON字符串被用作缩进字符串,可以设置为制表符或两个短划线之类个数大于10的字符会转换为10个。

 

③toJSON方法

将javascript的data对象转换为ISO 8601日期字符串。

        var book = {                       "title": "Professional JavaScript",                        "authors": [                            "Nicholas C. Zakas"                        ],                        edition: 3,                        year: 2011,                        toJSON: function(){                            return this.title;                        }                   };

如果存在toJSON()方法切能通过它取得有效的值,则调用该方法,否则返回对象本身。

如果提供了第二个参数,应用这个过滤器。传入函数过滤器的值是第一步返回的值。

对第二步返回的值进行相应的序列化。

如果提供了第三个参数,执行相应的格式化。

 

3.解析选项

 JSON.parse()可以接受另一个参数,该参数是函数,在键值对上调用。如果还原函数返回undefined,表示从结果删除相应的键,如果返回其他值,泽尔将该值插入到结果。将日期字符串转化为Date对象时经常要用。

        var bookCopy = JSON.parse(jsonText, function(key, value){            if (key == "releaseDate"){                return undefined;            } else {                return value;            }        });

 

《javascript高级程序设计》笔记(二十)