JSON.NET:获取特定的JSON日期值

前端之家收集整理的这篇文章主要介绍了JSON.NET:获取特定的JSON日期值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的VB.NET项目中,使用 JSON.NET,我从Web API获得了一个JSON,其值表示yyyy-MM-ddTHH:mm:ss格式的日期,我想简单地得到那个价值.

这里或多或少是JSON的样子:

{
    "REQ_DATE": "2016-01-17T12:27:57","REQ_TYPE": "Vacation","HOURS": 500.0,"LEAVE_TIME": "8:00 AM","LEAVE_DATE": "2016-01-23T00:00:00","DUE_TIME": "8:00 AM","DUE_DATE": "2016-01-24T00:00:00",}

所以我应该将它序列化并按照我的意愿行事,对吗?但是,当我将该键值放入变量时,日期格式会自动更改!

Dim temp As String = myJsonResult("REQ_DATE")
' temp = "1/17/2016 12:27:57 PM"

我需要从检索到的JSON中获取该日期.我认为有两种方法可以解决这个问题:将其转换为yyyy-MM-ddTHH:mm:ss手动,或使用正则表达式直接获取键值对 – 这两者都没有成功.

我尝试将其转换为DateTime:

Dim tempDateTime As DateTime = DateTime.ParseExact(myJsonResult("REQ_DATE").ToString,"yyyy-MM-dd hh:mm:ss",CultureInfo.InvariantCulture)
' Error: String is not Recognized as valid DateTime
Dim myDesiredResult As String = tempDateTime.ToString("yyyy-MM-ddTHH:mm:ss")

我试图使用正则表达式:

Dim regex As Regex = New Regex("""REQ_DATE"": ""([\d\w]*)""")
Dim match As Match = regex.Match(myJsonAsString)
If match.Success Then
   Dim myDesiredResult As String = match.Groups(1).Value
End If
' match is empty...

非常感谢任何和所有的帮助.

我假设myJsonResult是一个加载了JSON的JObject.

您的困难在于Json.NET在读取时自动将字符串识别为日期并将其转换为DateTime结构.然后,当您稍后对值标记执行ToString()时,它将以c#的“不变文化”格式返回,而不是原始格式,在本例中为ISO 8601.如果您不想要此行为,则可以使用解析JSON JsonSerializerSettings.DateParseHandling = DateParseHandling.None

Dim jsonString = "{'REQ_DATE':'2016-01-17T12:27:57','REQ_TYPE':'Vacation','HOURS':500.0,'LEAVE_TIME':'8:00 AM','LEAVE_DATE':'2016-01-23T00:00:00','DUE_TIME':'8:00 AM','DUE_DATE':'2016-01-24T00:00:00'}"
        Dim settings = New JsonSerializerSettings() With { _
            .DateParseHandling = DateParseHandling.None _
        }
        Dim myJsonResult = JsonConvert.DeserializeObject(Of JObject)(jsonString,settings)
        Dim dateValue = myJsonResult("REQ_DATE")
        Dim dateString = CType(dateValue,String) 'Value is 2016-01-17T12:27:57

JObject.Parse()没有超载需要使用JsonSerializerSettings,因此您需要使用DeserializeObject.此设置最终会传播到JsonReader.DateParseHandling.

或者,如果您可以使用Json.NET识别日期,但总是希望它们以ISO 8601格式打印,则可以将令牌重新序列化为JSON,而不仅仅是获取字符串值:

Dim dateValue = myJsonResult("REQ_DATE")
        Dim dateString = JsonConvert.SerializeObject(dateValue).Trim(""""c) 'Value is 2016-01-17T12:27:57

原型fiddle.相关c# question.

猜你在找的Json相关文章