我们想向正在测试我们应用程序的用户显示一些 JSON。因此,我们在 ASP.NET 代码隐藏文件中调用我们的 REST 服务并返回一个字符串,其中包含大量 JSON。
然后我们将它放在页面的 PRE 元素中,调用 beautify 来创建漂亮的可读 JSON,一切都很好:显示了某种人类可读的内容。
很好,但一方面:所有日期都以正常的 JSON 格式显示,例如“/Date(1319266795390+0800)/”
我想要做的是用 JSON (C#) 字符串中的“正常”日期替换那些 JSON 日期,因此在后面的代码中,在我将字符串添加到 PRE 元素之前。
我在考虑一些正则表达式,但我不知道如何...
最佳答案
我处理 JSON 字符串中的日期已有一段时间了,there's no standard way为此,这就是为什么有这么多不同的方法来做到这一点!如果 JSON 规范能够首先指定日期的标准格式,也许会更好!
Microsoft 正在以自己的方式进行计算,以 UTC 格式计算自 1970 年以来的毫秒数,类似于 "/Date(1319266795390+0800)/"
我们一直在将上面的字符串更改为 ISO-8601 format自从在 ASP.Net JavaScriptSerializer
输出上使用正则表达式以来。它是 W3C 标准,人类可读,也是大多数浏览器将 Date 序列化为字符串的方式,方法如下:
static readonly long DATE1970_TICKS = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).Ticks;
static readonly Regex DATE_SERIALIZATION_REGEX = new Regex(@"\\/Date\((?<ticks>-?\d+)\)\\/", RegexOptions.Compiled);
static string ISO8601Serialization(string input)
{
return DATE_SERIALIZATION_REGEX.Replace(input, match =>
{
var ticks = long.Parse(match.Groups["ticks"].Value) * 10000;
return new DateTime(ticks + DATE1970_TICKS).ToLocalTime().ToString("yyyy-MM-ddTHH:mm:ss.fff");
});
}
您可以轻松更改格式以满足您的需求,查看自定义日期和时间格式 check out MSDN article here
使用方法如下:
JavaScriptSerializer ser = new JavaScriptSerializer();
var JsonSrt = ISO8601Serialization(ser.Serialize(DateTime.Now)); // "\"2012-05-09T14:51:38.333\""
更新:
还有一种方法可以使用 Regex 将 JavaScript 中从服务器返回的 JSON 字符串调整为更易读的形式:
var str = "/Date(1319266795390+0800)/";
str.replace(/\/Date\((\d+)\+\d+\)\//, function (str, date) {
return new Date(Number(date)).toString();
});
关于c# - 将字符串中的 JSON 日期替换为更易读的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10209867/