我正在尝试解析 JSON 响应以将 ASP.NET 日期转换为 javascript 日期。
实际响应如下所示:
{"Id":1,"Title":null,"Description":null,"Content":null,"PropagateModel":false,"Status":0,"ComponentPublishDate":"\/Date(1340299653555)\/"}
我扩展了 javascript 字符串对象以将正则表达式转换\/Date(1340299653555)\/
为new Date(1340298914781)
String.prototype.parseWithJSONDate = function () {
return this.replace(/\/Date\((.*?)\)\//gi, 'new Date($1)');
};
然后我设置了一个转换器过滤器进行实际解析。
$.ajaxSetup({
dataFilter: function(data, dataType) {
if (dataType === "json") {
return data.parseWithJSONDate();
}
return data;
}
});
这个转换器不起作用。我遇到的第一个问题是转换器返回后响应会以某种方式损坏。我通过在函数结束时JSON.parse
这样调用来解决这个问题。return JSON.parse(res)
为什么我需要解析一个已经是 JSON 字符串的字符串?
第二个问题是实际的正则表达式似乎没有替换值。奇怪的是,我在函数之外的示例 JSON 字符串上对其进行了测试,它工作得很好。
任何人都可以提出任何建议吗?谢谢!
更新 1 我想我找到了第一个问题的答案。我的转换器针对 json 和 text 数据类型运行。这可能是我必须将返回值显式转换为 JSON 的原因。我从转换器中删除了文本数据类型,并相应地更新了其余代码。
更新 2 我最终创建了一个新的视图模型,其中日期是一个格式化的字符串。不是世界上最好的事情,但比搞砸 jQuery ajax 事件要好。