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

标签 c# regex json

我们想向正在测试我们应用程序的用户显示一些 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/

相关文章:

python - Python 3.x 中匹配此类字符串的正则表达式

javascript - 将数学字符串转换为 JavaScript 表达式

regex - 描述正则表达式的上下文无关语法?

json - MongoDB 查询语言本身是否有 JSON 模式之类的东西?

c# - 空合并运算符线程安全吗?

c# - 从 C# 读取 XML 配置数据文件

c# - 列表中的枚举值

c# - WPF 针对 .NET 4.5 但 Windows 要求在应用程序运行时安装 .NET 3.5

JsonView不起作用

json - Play JSON : reading optional nested properties