关于JSON
1. JSON 对象
es5 定义了全局对象 JSON。
支撑的浏览器有 IE8+ 、Firefox 3.5+ 、Safari 4+、Chrome、Opera 10.5+
2. JSON.stringify()
JSON.stringify() 除了接收要序列化的对象外,还能够接收别的两个参数。
第一个参数是一个过滤器,能够是一个数组或函数,第二个参数是一个选项,示意是不是在JSON字符串中保存缩进。
如:
var book = {
title: 'Professional JS',
authors: ['abc', 'def'],
edition: 3,
year: 2011
}
第一个参数是数组
var jsonText1 = JSON.stringify(book, ['title', 'edition'])
console.log(jsonText1) // '{"title":"Professional JS","edition":3}'
第一个参数是函数
var jsonText2 = JSON.stringify(book, function (key, value) {
switch (key) {
case 'authors':
return value.join(',');
case 'year':
return 2016;
case 'edition':
return undefined;
default:
return value;
}
})
console.log(jsonText2) // '{"title":"Professional JS","authors":"abc,def","year":2016}'
第二个参数用于掌握效果中的缩进和空白符。
如果是数值,则示意每一个级别缩进的空格数,最大10,凌驾10 的值自动转换成10。
如果是字符串,则用作缩进字符。字符串长度凌驾10,效果中将只涌现前10个字符。
会在效果字符串中插进去换行符进步可读性。
如:
var jsonText3 = JSON.stringify(book, null, 6)
console.log(jsonText3)
// '{
// "title": "Professional JS",
// "authors": [
// "abc",
// "def"
// ],
// "edition": 3,
// "year": 2011
// }'
var jsonText4 = JSON.stringify(book, null, '--')
console.log(jsonText4)
// '{
// --"title": "Professional JS",
// --"authors": [
// ----"abc",
// ----"def"
// --],
// --"edition": 3,
// --"year": 2011
// }'
3. toJSON() 要领
能够给对象定义 toJSON() 要领,返回本身的 JSON 数据格式,此要领优先级最高
如:
var book = {
title: 'Professional JS',
authors: ['abc', 'def'],
edition: 3,
year: 2011,
toJSON: function () {
return {
name: 'wfc'
}
}
}
var jsonText = JSON.stringify(book, null, 1)
console.log(jsonText)
// '{
// "name": "wfc"
// }'
注重: JSON.stringify() 处置惩罚的优先级为 toJSON() => 第二个参数 => 第三个参数。
4. JSON.parse()
JSON.parse() 接收另一个参数,该参数是一个函数,将在每一个健值对上采纳,类似于 JSON.stringify() 的过滤函数。
如:
var book = {
title: 'Professional JS',
authors: ['abc', 'def'],
edition: 3,
year: 2011,
releaseDate: new Date(2016,11,22)
}
var jsonText = JSON.stringify(book, null, 1)
console.log(jsonText)
// '
// json.html:48 {
// "title": "Professional JS",
// "authors": [
// "abc",
// "def"
// ],
// "edition": 3,
// "year": 2011,
// "releaseDate": "2016-12-21T16:00:00.000Z"
// }'
var copyBook = JSON.parse(jsonText, function (key, value) {
if (key === 'releaseDate') {
console.log(value) // '2016-12-21T16:00:00.000Z'
return new Date(value)
} else {
return value
}
})
JSON部份完毕