关于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部分结束