在我的VB.NET项目中,使用JSON.NET,我从Web API获得了一个JSON,该JSON的值表示yyyy-MM- ddTHH:mm:ss格式中的日期,我想简单地获取该值。
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中获取的Date。我看到解决此问题的两种方法:将其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")
我尝试使用Regex:
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是JObject您已将JSON加载到其中的内容。
myJsonResult
JObject
DateTime
ToString()
DateParseHandling.None`](http://www.newtonsoft.com/json/help/html/P_Newtonsoft_Json_JsonSerializerSettings_DateParseHandling.htm)以下命令解析JSON :
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。
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