首页 > 代码库 > 《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高级程序设计》笔记(二十)