0

我收到以下 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:30:00,1.001],[2013-07-23T10:45:00,0.947],[2013-07-23T11:00:00,0.278],[2013-07-23T11:15: 00,0.48],[2013-07-23T11:30:00,0.709],[2013-07-23T11:45:00,1.315],[2013-07-23T12:00:00,0.89],[2013- 07-23T12:15:00,0.31],[2013-07-23T12:30:00,0.121],[2013-07-23T12:45:00,0.593],[2013-07-23T13:00:00, 0.513],[2013-07-23T13:15:00,0.222],[2013-07-23T13:30:00,1.759],[2013-07-23T13:45:00,1.715],[2013-07- 23T14:00:00,1.439],[2013-07-23T14:15:00,0.448],[2013-07-23T14: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#。建议?

4

2 回答 2

1

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

第一个问题是“数组”部分实际上是在字符串值内。您可能认为您可以简单地获取字符串值并尝试将其重新解析为 JSON,但随后您会遇到另一个问题:字符串值本身不是有效的 JSON 数组,正如 @Blender 所注意到的。为了使其有效,需要引用日期值,因为 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列表。

于 2013-07-24T00:14:33.470 回答
1

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

于 2013-07-23T22:18:03.350 回答