JSON是一种数据格式,不是编程语言;
JSON.stringify();JSON.parese();
过滤函数;还原函数。
书摘&心得
- JSON是一种数据格式,不是一种编程语言
- JSON可以表示三种类型
- 简单值
- JSON 字符串必须使用双引号
- 对象
- 与javascript对象的区别
- 没有声明变量
- 没有末尾的分号
- 对象的属性必须加双引号
- 与javascript对象的区别
- 数组
- 也没有变量和分号
- 简单值
可以把JSON 数据结构解析为有用的 JavaScript 对象
序列化
JSON 对象有两个方法:
- stringify()
- JavaScript->JSON
- 把JavaScript 对象序列化为 JSON 字符串
- 只保留有效JSON数据类型
- 所有函数及原型成员都会被有意忽略,不体现在结果中。
- 值为undefined 的任何属性也都会被跳过
- parse()
- JSON->JavaScript
- 把 JSON 字符串解析为原生 JavaScript 值
- 如果传给 JSON.parse()的字符串不是有效的 JSON,该方法会抛出错误
序列化选项
1、 stringify的过滤函数
第二个参数是数组: ```javascript var book = { “title”: “Professional JavaScript”, “authors”: [ “Nicholas C. Zakas” ], edition: 3, year: 2011 }; // 在返回的结果字符串中,就只会包含这两个属性 var jsonText = JSON.stringify(book, [“title”, “edition”]);
- stringify()
// 结果 {“title”:”Professional JavaScript”,”edition”:3}
第二个参数是函数:
```javascript
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;
}
});
第三个参数控制缩进和空白符
var jsonText = JSON.stringify(book, null, 4);
var jsonText = JSON.stringify(book, null, " - -");
2、parse的还原函数
- 如果还原函数返回 undefined,则表示要从结果中删除相应的键。
- 在将日期字符串转换为 Date 对象时,经常要用到还原函数。
var book = {
"title": "Professional JavaScript",
"authors": [
"Nicholas C. Zakas"
],
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;
}
});
alert(bookCopy.releaseDate.getFullYear());