如何解析数组c#的Json值



我收到以下Json响应:

{"time_series_data":"[[2013-07-23T09:45:00,0.991],[2013-07-23T10:00:00,1.047],[2013-07.23T10:15:00,0.069],[2013-07/23T10:00,1.001],[2013-03-23T10:45:00,0.947],[2013-20-23T11:00:00,0.278],[20103-07-23T11:15:00,0.48],[2013-07-23T11:30:00,0.709],[13-07-23T11:00,1.315],[12013-07-23T12:00:00,0.89],[2013-207-23T12:00,0.31],〔2013-07-23T12:30:00,0.121〕,〔2013-07-23 T12:45,0.593〕,〔2013-07-23T13::00,0.513〕,〔2013-07-23 t13:15:00,0.222〕,〔2013 07-23t113:30:00,1.759〕,〔13 07-23T14:00:00,1.715〕,〔14 07-23T14:15:00,0.448〕,〔〔2013 07-23 t14:30:00,0.105〕"

我该如何阅读这些日期并将其合并到列表中?

我试过使用Json.net,但我不能完全确定上面的值集合叫什么。使用以下代码,我可以取出[[和]]括号之间的值,但我不确定如何从这里开始。

JsonTextReader jR = new JsonTextReader(new StringReader(WebApiURL));
string data = "";
while (jR.Read())
{
    if (jR.Value != null && jR.Value != "time_series_data")
    data = jR.Value.ToString();
}

我可以使用Json.net或原生c#。建议?

虽然您得到的JSON响应是有效的JSON作为一个整体,但它的形式不允许您使用标准JSON库轻松提取日期和小数。

第一个问题是"数组"部分实际上位于字符串值内部。你可能认为你可以简单地获取字符串值,并尝试将其重新解析为JSON,但随后你会遇到另一个问题:正如@Blender所注意到的,字符串值本身不是有效的JSON数组。为了使其有效,需要引用日期值,因为JSON没有本机日期表示。

因此,无论如何,您将不得不对数据进行一些手动处理以提取值。幸运的是,使用正则表达式拆分字符串并不是很困难。以下是我要采取的方法:

首先,定义一个简单的类来保存数据项。

class DataItem
{
    public DateTime Date { get; set; }
    public double Number { get; set; }
}

然后,从您中断的地方开始,您可以像这样解析data字符串:

List<DataItem> timeSeriesData = new List<DataItem>();
string[] pairs = Regex.Split(data, @"[[|],[|]]");
foreach (string pair in pairs)
{
    if (!string.IsNullOrEmpty(pair) && char.IsDigit(pair[0]))   // sanity check
    {
        string[] parts = pair.Split(',');
        DateTime date = DateTime.Parse(parts[0], CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind);
        double number = double.Parse(parts[1]);
        timeSeriesData.Add(new DataItem { Date = date, Number = number });
    }
}

现在,您可以根据需要使用timeSeriesData列表。

您可以使用http://json2csharp.com/为了获得VALID json的对象结构,您可以使用json.net库来解析它们。

相关内容

  • 没有找到相关文章

最新更新