这种情况发生在谷歌浏览器中:
var obj = {"date" : new Date()};
var objJSON = JSON.stringify(obj);
//"{"date":"2014-04-30T07:35:29.002Z"}"
var objBack = JSON.parse(objJSON);
objBack不是日期对象是字符串。我需要这样做:
objBack.date = new Date(objBack.date)
有没有办法直接取回日期对象?
我需要这个,因为我使用JSON.parse从localStorage返回这个对象之后,使用JSON.stringify存储在localStorage中的一个复杂对象(有很多日期),所以它' d很棒,将日期作为日期对象而不是字符串。
答案 0 :(得分:1)
UPD:答案https://stackoverflow.com/a/15120418/1016033更为通用,如果toJSON
,请勿覆盖默认Date
方法。
JSON.stringify
调用对象的JSON方法(如果有)。所以你可以将JSON方法添加到Date原型。
JSON.parse
具有为每个已解析的值调用的第二个参数函数,可用于为某些值调用new Date
。
以下是它们如何运作的小例子:
Date.prototype.toJSON = function() {
return 'date:' + (+this);
}
var obj = {
date: new Date,
s: 'string',
n: 42
};
console.log(obj);
var json = JSON.stringify(obj);
console.log(json);
function revive(k, v) {
if (typeof v == 'string' && v.indexOf('date:') == 0) {
return new Date(+(v.slice(5)));
}
return v;
}
var objBack = JSON.parse(json, revive);
console.log(objBack);
结果:
~$ node a.js
{ date: Wed Apr 30 2014 12:09:11 GMT+0400 (MSK),
s: 'string',
n: 42 }
{"date":"date:1398845351567","s":"string","n":42}
{ date: Wed Apr 30 2014 12:09:11 GMT+0400 (MSK),
s: 'string',
n: 42 }