2016-09-21 75 views
0

这是我的JSON数据:如何thorugh JArray项目迭代列表

{ 
    "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(); 
    } 
} 

谢谢你的帮忙!

+2

如果您将json转换为模型,您可以轻松完成http://json2csharp.com/ –

+0

我不知道从哪开始,但我会考虑它谢谢! – kieron

+0

你要做的事似乎与数据不符。在您的源代码json中没有提及'targe_arrival_time'或'stop'。应该“停止”离开吗? – Ceilingfish

回答

1

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

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

[*]这里是通配符操作者返回departures.all[]阵列中的所有条目。请参阅here

样本fiddle