0

我正在尝试解析 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 事件要好。

4

2 回答 2

2

尝试使用 adataFilter代替:

$.ajaxSetup({
    dataFilter: function(data,dataType) {
        if (dataType === "json") {
            return data.parseWithJSONDate();
        }
        return data;
    }
});

这假定您的parseWithJSONDate方法返回一个有效的 json 字符串。然后,您只需将其json用作您的数据类型。

dataFilter 方法的目的是清理原始响应文本,我认为这非常适合这种情况。只要您返回有效的 json,jquery 就会对其进行解析并将其转换为正常的 javascript 对象。

编辑:现在我考虑它可能会失败,new Date()因为那不是有效的json。

于 2012-06-21T17:45:18.043 回答
0

我最终在服务器上将所有日期转换为适当的格式并将值返回给客户端。不是最佳解决方案,但我无法弄清楚如何使用数据过滤器进行转换。

于 2012-07-12T03:40:26.943 回答