JavaScript高级程序设计-第三版(JSON)

二十、JSON

  • JSON
    • JavaScript Object Notation

20.1 语法

  • 简单值
    • string、number、bool、null
  • 对象
    • 一组有序的键值对
  • 数组

20.1.1 简单值

  • 5、“Hello World!”
  • 字符串必须用双引号

20.1.2 对象

  • 属性名必须加双引号
{
	"name":"Nicholas",
	"age":29,
	"school":{
		"name":"Merrimack Collage",
		"location":"North Andover, MA"
	}
}

20.1.3 数组

  • 对象和数组通常是JSON数据结构的最外层形式
[
	{
		"title":"Professional JavaScript",
		"authors":[
			"Nicholas C. Zakas"
		],
		"edition":3,
		"year":2011
	},
	{
		"title":"Professional JavaScript",
		"authors":[
			"Nicholas C. Zakas"
		],
		"edition":2,
		"year":2009
	}
]

20.2 解析与序列化

  • JSON数据结构解析为JavaScript对象比XML解析为DOM对象进行查询更方便

20.2.1 JSON对象

  • ECMAScript 5定义了全局对象JSON
  • JSON对象的方法
    • stringify()
      • 对象中的函数以及原型成员会被忽略
    • parse()
      • 值为undefined的任何属性会被忽略

20.2.2 序列化选项

  • stringify()除接收需要序列化的javascript对象外,还接收另外两个参数
    • 过滤器
      • 数组
      • 函数
    • 格式
20.2.2.1 过滤结果
  • 数组
    • 结果中只包含数组中列出的属性
  • 函数
    • 函数传入两个参数
      • 属性名
      • 属性值
    • 返回值
      • 序列化键值或undefined
var book = {
		"title":"Professional JavaScript",
		"authors":[
			"Nicholas C. Zakas"
		],
		"edition":3,
		"year":2011
	};

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;
	}
});
20.2.2.2 字符串缩进
  • 数字
    • 每个级别缩进的空格数,自动换行
  • 字符串
    • 缩进字符设置为该字符串,而不是空格
    • var jsonText = JSON.stringify(book, null, “–”);
20.2.2.3 toJson()方法
  • 序列化顺序
    • 调用对象上的toJSON()方法并能取得有效值,若无则按默认顺序执行序列化
    • 过滤器,传入上一步的结果
    • 格式化
var book = {
		"title":"Professional JavaScript",
		"authors":[
			"Nicholas C. Zakas"
		],
		"edition":3,
		"year":2011,
		toJSON: function(){
			return this.title;
		}
	};

var jsonText = JSON.stringify(book);

20.2.3 解析选项

  • parse()除接收需要解析的JSON字符串外,还接收另一个参数
    • 还原函数
      • 传入键、值
      • 返回undefined,表示从结果中删除该键
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"){
		//将日期字符串复原为Date对象
		return new Date(value);
	}else{
		return value;
	}
});

alert(bookCopy.releaseDate.getFullYear());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值