将字符串中的JSON日期替换为更易读的日期

Mic*_*hel 8 c# regex json

我们想向正在测试我们的应用程序的用户展示一些JSON.所以我们在ASP.NET代码隐藏文件中调用我们的REST服务并返回一个包含大量JSON的字符串.

然后我们将它放在页面中的PRE元素中,调用beautify来创建可读的JSON并且一切都很好:显示了一些人类可读的内容.

好但是一件事:所有日期都以正常的JSON格式显示,如"/ Date(1319266795390 + 0800)/"

我想要做的是用JSON(C#)字符串中的'普通'日期替换那些JSON日期,所以在后面的代码中,在我将字符串添加到PRE元素之前.

我在考虑一些正则表达式,但我无法弄清楚如何......

Kam*_*eri 13

我一直在处理JSON字符串中的日期已有一段时间了,没有标准的方法,这就是为什么有这么多不同的方法来做到这一点!如果JSON规范可以首先为日期指定标准格式,那可能会更好!

微软正在以自己的方式做到这一点,从1970年开始以UTC格式计算msecs就像这样 "/Date(1319266795390+0800)/"

自从在输出顶部使用正则表达式以来,我们一直在将上述字符串更改为ISO-8601格式ASP.Net JavaScriptSerializer.这是一个W3C标准,人类可读和大多数浏览器序列化日期到字符串的方式,这里是如何:

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");
    });
}
Run Code Online (Sandbox Code Playgroud)

您可以轻松更改格式以满足您的需求,查看自定义日期和时间格式在此处查看MSDN文章

以下是它的使用方法:

JavaScriptSerializer ser = new JavaScriptSerializer();
var JsonSrt = ISO8601Serialization(ser.Serialize(DateTime.Now));    // "\"2012-05-09T14:51:38.333\""
Run Code Online (Sandbox Code Playgroud)

更新:

可以使用Regex将JavaScript中服务器返回的JSON字符串调整为更易读的形式:

var str = "/Date(1319266795390+0800)/";
str.replace(/\/Date\((\d+)\+\d+\)\//, function (str, date) {
    return new Date(Number(date)).toString();
});
Run Code Online (Sandbox Code Playgroud)


小智 5

解决方案位于问题中显示的字符串中.JavaScript Date对象将解析该格式并生成可读版本,因此Date(1319266795390+0800)返回"Wed Apr 18 2012 08:13:22 GMT-0500(Central Daylight Time)".

要从字符串中删除正斜杠,可以将replace函数与正则表达式一起使用:"/Date(1319266795390+0800)/".replace(/\//g, '').