var d = new Date();
//預設Date會轉為yyyy-MM-ddTHH:mm:ss.fffZ ISO 8601格式
var t = JSON.stringify(d);
console.log(t);
//parse時,ISO 8601格式並不會被轉成Date,而是被視為字串
console.log(typeof (JSON.parse(t)));
//透過reviver提供ISO 8601字串轉Data的功能
//REF: http://msdn.microsoft.com/zh-tw/library/ie/cc836466(v=vs.94).aspx
var dateReviver = function (key, value) {
var a;
if (typeof value === 'string') {
a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
if (a) {
return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]));
}
}
return value;
};
var result = JSON.parse(t, dateReviver);
console.log("type=" + typeof (result) + ", value=" + result.toString());
//同場加映: 排除特定屬性及修改屬性值
var obj = {
boo: "BOO",
foo: "FOO",
blah: "BLAH"
};
t = JSON.stringify(obj);
console.log(t);
//客製Reviver,忽略boo,並在foo的內容後方加上"*"
var myReviver = function (key, value) {
//傳回null或undefined會刪除該屬性
if (key == "boo") return undefined;
if (key == "foo") return value + "*";
return value;
};
result = JSON.parse(t, myReviver);
console.log(JSON.stringify(result));