Javascript JSON.stringify和JSON.parse不';不能使用日期对象
这在谷歌Chrome中发生:Javascript JSON.stringify和JSON.parse不';不能使用日期对象,javascript,json,Javascript,Json,这在谷歌Chrome中发生: 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) 有没有办法直接返回日期对象 我需要它,因为我有一个
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.stringify存储在localStorage中,在我使用JSON.parse从localStorage获取该对象之后,因此,最好将日期作为日期对象而不是字符串。UPD:答案更一般,如果
Date
,不要覆盖默认的toJSON
方法
如果存在对象的JSON方法,则调用该方法。所以您可以将toJSON方法添加到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 }
据我所知,没有其他办法,你必须这样做objBack.date=新日期(objBack.date)可能重复@RajeshCP你知道为什么吗?我想如果谷歌这么做,他们是有原因的…@alasarr:你怎么会认为谷歌与JSON有任何关系?你是对的,谷歌与JSON有任何关系,这是我的第一个想法,因为谷歌有谷歌Chrome,但emacscript规范不是谷歌的责任。不管怎样,我想不管是谁干的都有原因。。。为什么?如果存在,不要覆盖Date.prototype.toJSON
;如果你做了填隙,用一些东西填隙。它是有效的,但是@T.J.Crowder是对的,我们应该根据spec@T.J.Crowder@alasar,你说得对。毕竟,我更喜欢使用stringify
的第二个参数,因为这对我来说更容易。