如何迭代列表中的JArray项目

时间:2016-09-21 20:10:07

标签: c# asp.net json api json.net

这是我的json数据:

{
    "date": "2016-08-26",
    "time_of_day": "14:19",
    "request_time": "2016-08-26T14:19:59+01:00",
    "station_name": "Derby",
    "station_code": "DBY",
    "departures": {
      "all": [
        {   
           "service": "22152000",
        },
        {
           "service": "22150000",
        },
        {
           "service": "22180008",
        }
      ]
    }
}

我想要做的是将上面json中的每个服务变量放入一个列表中。在此之后,我想要通过api链接单独调用这些服务变量中的每一个。这是我的C#代码:

JArray items = new JArray();
items.Add(service["service"]);
int serviceLength = items.Count;

for (int i = 0; i < items.Count; i++)
{
    string moreJson = get_web_content("http://transportapi.com/v3/uk/train/service/" + items[i] + "/" + date + "/" + hours + ":" + minutes + "/timetable.json?" + appID + "/" + appKey);

    dynamic schedluedContent = JsonConvert.DeserializeObject(moreJson);
    JArray items2 = new JArray();

    foreach (JObject stops in schedluedContent.stops)
    {

        dr = dt.NewRow();
        dr["Station Code"] = stops["station_code"];
        dr["Station Name"] = stops["station_name"];
        dr["Aimed Arrival Time"] = stops["aimed_arrival_time"];

        dt.Rows.Add(dr);
        GridViewTrainTimes.DataSource = dt;
        GridViewTrainTimes.DataBind();
    }
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您可以使用SelectTokens()查找所有服务值。 SelectTokens()支持使用JSONPath syntax查询嵌套在具有通配符和/或过滤器的JSON对象内部的多个属性。

var services = stops
    .SelectTokens("departures.all[*].service")
    .Select(t => (string)t)
    .ToList();

此处[*]是通配符运算符,返回departures.all[]数组中的所有条目。

有关JSONPath的完整说明,请参阅here

示例fiddle