如何解析JSON以在JavaScript中接收Date对象?

2022-08-30 04:06:59

我有以下一段JSON:

\/Date(1293034567877)\/

这是以下 .NET 代码的结果:

var obj = DateTime.Now;
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
serializer.Serialize(obj).Dump();

现在我面临的问题是如何在JavaScript中创建一个Date对象。我能找到的只是令人难以置信的正则表达式解决方案(许多包含错误)。

很难相信没有优雅的解决方案,因为这都是在JavaScrip中,我的意思是JavaScript代码试图读取JSON(JavaScript Object Notation),这应该是一个JavaScript代码,目前事实证明这不是因为JavaScript不能在这里做得很好。

我还看到了一些我无法工作的解决方案(除了被指出为安全威胁)。

真的没有办法以优雅的方式做到这一点吗?

没有真正答案的类似问题:
如何使用GWT解析 ASP.NET JSON日期格式


答案 1

JSON.parse 函数接受可选的 DateTime 齐磊函数。您可以使用如下函数:

dateTimeReviver = function (key, value) {
    var a;
    if (typeof value === 'string') {
        a = /\/Date\((\d*)\)\//.exec(value);
        if (a) {
            return new Date(+a[1]);
        }
    }
    return value;
}

然后致电

JSON.parse(somejsonstring, dateTimeReviver);

你的约会会正确出来。


答案 2

没有标准的 JSON 日期表示形式。你应该做@jAndy建议的事情,而不是序列化一个;只需发送一个 RFC 1123 日期字符串或来自 Unix 纪元的秒数,或者您可以在 JavaScript 中用于构造 .DateTimeToString("r")Date