我正在使用Json.NET来序列化一些数据。日期序列化的方式非常灵活,因此我可以将其输出为任何必要的格式。
是否有一种日期格式,浏览器提供的JSON.parse
函数会反序列化为Date
个对象?如果没有,有没有人知道一个好的库将JSON反序列化为JavaScript对象,包括日期?
我真的不想在反序列化JSON的其余部分之后使用RegExp
和一大堆丑陋的代码来解析日期;我只想要一个完成整个事情的单个函数调用。
答案 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));
?