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

MgS*_*Sam 3 javascript serialization json date

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

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

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

Den*_*ret 5

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

不。该标准没有关于日期的内容。

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

并且MSDN 有一个关于如何为标准JSON.parse函数构建恢复器以获取日期的文档

提炼 :

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
Run Code Online (Sandbox Code Playgroud)

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

缺点是您无法区分与序列化日期相同的日期和字符串。这使得 JSON 格式含糊不清,这可能就是为什么JSON.parse不冒险对这些日期进行正常反序列化的原因。