您的位置:首页 > Web前端 > JavaScript

JSON拾遗

2015-08-01 17:45 555 查看
最近开始翻《JavaScript高级程序设计》,其实很多大师级人物都推荐这本书为JavaScript入门级读物。因为第20章 JSON篇幅最小,而且以前也写过一篇JSON的总结JSON简介以及用法汇总,正好先拿来查漏补缺下。

其实除了JSON本身的定义外,跟JSON有关的有就两个函数,可以将JSON数据类型和字符串之间进行转换。JSON的语法不再多述,字符串要用
双引号
引起来,而且不能有
undefined
作为value值。

JSON有个
stringify
方法,可以将JSON数据转化为字符串,它的第二个参数可以是数组或者方法,具体使用方法可以参照前文,而第三个参数可以控制缩进,由于第三个参数也可以是字符串,以前我以为是可以增加key的前缀,我错了,它是纯粹当缩进使用的,为了使得JSON数据看起来清晰:

var obj = {name: 'hanzichi', age: 10};
var str = JSON.stringify(obj, null, '--');
console.log(str);

有时候,JSON.stringify还是不能满足对某些对象进行自定义序列化的需求。在这些情况下,可以给对象自定义
toJSON()
方法,返回其自身的JSON数据格式。可以为任何对象添加toJSON方法:

var person = {
name: 'hanzichi',
age: 10,
toJSON: function() {
return this.name;
}
}

var str = JSON.stringify(person);
console.log(str);

查看控制台,输出的东西其实是
"hanzichi"
,如果代码返回修改成
this.age
,就会是
10
,完全被JSON序列化为一个简单的字符串。你也可以让这个方法返回understand,此时如果包含它的对象嵌入在另一个对象中,会导致它的值变成null,而如果它是顶级对象,结果就是understand。

toJSON()
可以作为函数过滤器的补充,因此理解序列化的内部顺序十分重要。假设把一个对象传入JSON.stringify(),序列化该对象的顺序如下:

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

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

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

如果提供了第三个参数,执行相应的格式化
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: