解析JSON并查找具有最接近匹配日期的元素

时间:2017-09-22 01:56:39

标签: c# json datetime compare weather-api

我有一个包含一些数据的JSON字符串。

not 声明了匹配的类型并且正在使用动态,因为有许多实例进行API调用并返回具有完全不同结构的JSON。

我要做的是在entries的第一个元素中循环遍历days数组 - 并获取dateTime与当前日期时间紧密匹配的条目。

我遇到的错误是:

  

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:不能   隐式转换类型Newtonsoft.Json.Linq.JArray' to字符串'。一个   存在显式转换(您是否错过了演员?)

我相信使用动态需求以及浏览相当复杂的数据结构会增加一些复杂性。

这是我尝试过的。

dynamic windData = JsonConvert.DeserializeObject(resultWindAPI); //resultWindAPI is the JSON presented below. 

string windEntries = windData.forecasts.wind.days[0].entries;
dynamic windEntryData = JsonConvert.DeserializeObject(windEntries);

//find closest wind time to get most recent data
int min = int.MaxValue;
DateTime now = new DateTime();
dynamic currentWindEntry = windEntryData[0];

foreach(dynamic entry in windEntryData)
{
    DateTime thisDateTime = entry.dateTime;

    if (Math.Abs(thisDateTime.Ticks - now.Ticks) < min)
    {
        min = (int)thisDateTime.Ticks - (int)now.Ticks;
        currentWindEntry = entry;
    }
}

//Do something with the currentWindEntry 

Here is an example我试图解析的JSON。

1 个答案:

答案 0 :(得分:1)

根据错误消息

string windEntries = windData.forecasts.wind.days[0].entries;

是问题。

您可以通过动态变量访问这些条目,然后再分配它。

dynamic windEntryData = windData.forecasts.wind.days[0].entries;