JS的JSON
一、对json的理解
{ "name": "Nicholas", "age": "27" }
[ //JSON数组也没有变量和分号 { "title":"haha", "authors":[ "1":"2", "3":"4" ] }, "name":"xixi" ]
//JavaScript对象字面量 var obj = { "name":"Nicholas", "age":29 }; //JSON对象 { "name":"Nicholas", "age":29 }
二、解析与序列化
var book = { title : "Professional JavaScript", authors : [ "Nicholas C . Zakas" ], edition : 3, year : 2011 }; var jsonText = JSON.stringify(book); alert(jsonText); // {"title":"Professional JavaScript","authors":["Nicholas C . Zakas"],"edition":3,"year":2011}
默认的JSON.stringify()输出的JSON对象不包含任何空格字符或缩减。
在序列化JavaScript对象时,所有的函数及原型对象都会被有意忽略,不体现在结果中。此外,值为undefined的任何属性也都会被跳过,结果中最终都是值为有效JSON数据类型的实例属性。
var bookcopy = JSON.parse(jsonText); //Object {title: "Professional JavaScript", authors: Array[1], edition: 3, year: 2011}
var jsonText = JSON.stringify(book, ["title","edition"]); //{"title":"Professional JavaScript","edition":3}
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; } }); //{"title":"Professional JavaScript","authors":"Nicholas C . Zakas","year":5000}
var book = { title : "Professional JavaScript", authors : [ "Nicholas C . Zakas" ], edition : 3, year : 2011, toJSON: function(){ return this.title; } }; var jsonText = JSON.stringify(book); //"Professional JavaScript"
var book = { title : "Professional JavaScript", authors : [ "Nicholas C . Zakas" ], edition : 3, year : 2011, releaseDate : new Date(2011, 11,1) }; var jsonText = JSON.stringify(book); //{"title":"Professional JavaScript","authors":["Nicholas C . Zakas"],"edition":3,"year":2011,"releaseDate":"2011-11-30T16:00:00.000Z"}
var bookcopy = JSON.parse(jsonText, function(key, value){ if(key == "releaseDate"){ return new Date(value); } else { return value; } }); //Object {title: "Professional JavaScript", authors: Array[1], edition: 3, year: 2011, releaseDate: Thu Dec 01 2011 00:00:00 GMT+0800 (中国标准时间)} alert(bookcopy.releaseDate.getFullYear()); //2011
三、再说几句toJSON()
toJSON 方法由 JSON.stringify 函数使用。 JSON.stringify 将 JavaScript 值序列化为 JSON 文本。 如果向 JSON.stringify 提供了 toJSON 方法,则在调用 JSON.stringify 时将调用 toJSON 方法。
toJSON 方法是 Date JavaScript 对象的内置成员。 它返回 UTC 时区的 ISO 格式日期字符串(由后缀 Z 表示)。
可重写 Date 类型的 toJSON 方法,也可为其他对象类型定义 toJSON 方法,以实现在 JSON 序列化之前对特定对象类型进行数据转换。
var contact = new Object(); contact.firstname = "Jesper"; contact.surname = "Aaberg"; contact.phone = ["555-0100", "555-0120"]; contact.toJSON = function(key) { var replacement = new Object(); for (var val in this) { if (typeof (this[val]) === ‘string‘) replacement[val] = this[val].toUpperCase(); else replacement[val] = this[val] } return replacement; }; var jsonText = JSON.stringify(contact);//{"firstname":"JESPER","surname":"AABERG","phone":["555-0100","555-0120"]}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。