JSON.stringify和JSON.parse不适用于日期对象

时间:2014-04-30 07:57:21

标签: javascript json

这种情况发生在谷歌浏览器中:

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很棒,将日期作为日期对象而不是字符串。

1 个答案:

答案 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 }