JSON.parse或替代库,它也将解析日期

时间:2013-02-27 19:07:29

标签: javascript json date serialization

我正在使用Json.NET来序列化一些数据。日期序列化的方式非常灵活,因此我可以将其输出为任何必要的格式。

是否有一种日期格式,浏览器提供的JSON.parse函数会反序列化为Date个对象?如果没有,有没有人知道一个好的库将JSON反序列化为JavaScript对象,包括日期?

我真的不想在反序列化JSON的其余部分之后使用RegExp和一大堆丑陋的代码来解析日期;我只想要一个完成整个事情的单个函数调用。

2 个答案:

答案 0 :(得分:3)

  

是否有浏览器提供JSON.parse函数的日期格式   将反序列化为Date对象?

没有。 standard对日期一无所知。

但是Date对象现在有一个特定的toJSON函数,用于定义事实上 JSON日期序列化的标准。它基于toISOString。请参阅EcmaScript

MSDN has a documentation关于如何为标准JSON.parse函数构建一个reviver,以便让日期恢复。

提取:

var jsontext = '{ "hiredate": "2008-01-01T12:00:00Z", "birthdate": "2008-12-25T12:00:00Z" }';
var dates = JSON.parse(jsontext, dateReviver);
document.write(dates.birthdate.toUTCString());

function dateReviver(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;
};

// Output:
// Thu, 25 Dec 2008 12:00:00 UTC

这并不完全是“一个RegExp和一大堆丑陋的代码,用于在反序列化其余的JSON之后解析日期;”,而是一个RegExp和一堆合理的丑陋但可重复使用的代码在反序列化期间解析日期......

缺点是您无法区分与序列化日期相同的日期和字符串。这使得JSON格式模糊不清,这可能是JSON.parse通常无法反序列化这些日期的原因。

答案 1 :(得分:0)

为什么不呢 var d = new Date(Date.parse(utcDateString));