我有一个控制器操作,它实际上只是返回模型的JsonResult.因此,在我的方法中,我有如下内容:

return new JsonResult(myModel);

这很好用,除了一个问题.模型中有一个Date属性,该属性似乎在Json结果中返回,如下所示:

"\/Date(1239018869048)\/"

我应该如何处理日期,以便它们以我需要的格式返回?或者我如何在脚本中处理上面的格式?

推荐答案

仅仅是扩展到casperOne's answer.

JSON spec不包括日期值.MS必须进行调用,他们选择的路径是利用字符串的javascript表示中的一个小技巧:字符串文本"/"与"\/"相同,字符串文本将被序列化为"\/"(甚至"\/"必须映射为"\\/").

有关更好的解释,请参见http://msdn.microsoft.com/en-us/library/bb299886.aspx#intro_to_json_topic2(向下滚动到"从JavaScript文字到JSON")

JSON的一个痛点是 缺少日期/时间文字.许多 人们感到惊讶和失望 当他们第一次学到这一点的时候 遇到JSON.简单的解释 (安慰或不安慰)缺席 日期/时间文字是JavaScript 也从来没有过:支持 JavaScript中的日期和时间值为 完全通过日期提供 对象.大多数使用JSON的应用程序 因此,作为一种数据格式,通常 倾向于使用字符串或 表示日期和时间的数字 价值.如果使用字符串,则可以 通常期望它在ISO中 8601格式.如果使用数字, 取而代之的是,该值通常为 被认为是指……的数量 以通用坐标为单位的毫秒 纪元以来的时间(UTC),其中纪元是 定义为1970年1月1日午夜 (UTC).再说一次,这只是一个 约定,而不是JSON的一部分 标准的.如果您要交换数据 使用另一个应用程序,您将 需要查看其文档以查看 它如何编码日期和时间值 在JSON文字中.例如, 微软的ASP.NET AJAX既不使用也不使用 所描述的惯例的一部分.相反, 它将.NET日期时间值编码为 JSON字符串,其中 字符串为/日期(刻度)/以及其中 TICKS表示从 纪元(UTC).所以1989年11月29日, 上午4:55:30,UTC编码为 "\/日期(628318530718)\/".

一个解决方案就是把它解析出来:

value = new Date(parseInt(value.replace("/Date(", "").replace(")/",""), 10));

不过,我听说有一个设置可以让序列化程序输出DateTimenew Date(xxx)语法的对象.我会试着把它挖出来.


第二个参数JSON.parse()接受一个reviver函数,其中规定了在返回之前,最初产生的值是如何产生的.

以下是日期的示例:

var parsed = JSON.parse(data, function(key, value) {
  if (typeof value === 'string') {
    var d = /\/Date\((\d*)\)\//.exec(value);
    return (d) ? new Date(+d[1]) : value;
  }
  return value;
});

JSON.parse()人的文件

Javascript相关问答推荐

gatsby :getImage 返回未定义

如何在 vanilla JS 中重写这个 ramda.js 代码

MongoDB - 查询以获取与排序的第一项中的键匹配的项目

使用 Frida 重载函数时从列表中删除元素

在悬停时为字体大小设置动画时出现闪烁问题

::after 伪元素的垂直对齐

ObjectSpaceNormalMap 不适用于 MeshNormalMaterial

在包装函数中添加日志(log)

react js中的搜索过滤器

使用 HTML、CSS 和 JavaScript 在页面刷新时保持选定的主题

这个在 express 中接收 RequestHandler 的函数是如何工作的?

两行相同代码的区别

将js日期时间转换为时刻

nuxt 中未调用 AsyncData

使用下拉菜单 HTML 创建粘性导航栏

我不能用 useEffect 在 React 中添加类名还是?

我在 js 中的数组开头未定义

Form.IO - 如何使 DataGrid 中的下拉选择变得可见

如何从 Firebase 版本 7 中删除数据?

基于模式 Marklogic/java 脚本批量删除文档