c# - 如何使用循环从 c# 中的字符串中提取特定的子字符串?
问题描述
我试图从我从 Web 服务器获得的响应中提取路由号。响应如下所示;
[{"Description":"METRO Blue Line","ProviderID":"8","Route":"901"},{"Description":"METRO Green Line","ProviderID":"8","Route ":"902"},
我只需要获取路线编号,以便我可以用它们填充组合框。我正在尝试使用循环,因为有很多。我当前的解决方案获得了第一个路由号码,但由于某种原因,我之后才获得提供者号码。这就是我到目前为止所拥有的。
//get bus routes and popluate the busRoutecmb
restClient.endPoint = routeUrl + formatLine;
string response = restClient.request();
//show me what was returned for debug puposes
System.Diagnostics.Debug.Write(response);
//sort through data and put relevent item in a list
List<string> responseItems = new List<string>();
//splitting into routes
string[] splitByRoute = response.Split('}');
//extracting route number from elements in splitByRoute
List<string> extractedRouteNums = new List<string>();
foreach (string thing in splitByRoute)
{
//splitting each bus route up by piece of information
string[] splitByWord = thing.Split(',');
//getting rid of everything but the route number
int length = splitByWord.Length;
int count = 2;
while (count <= length)
{
string[] word = splitByWord[count].Split(':');
string routeNum = word[1].Trim('"');
count += 3;
extractedRouteNums.Add(routeNum);
System.Diagnostics.Debug.WriteLine(count);
System.Diagnostics.Debug.WriteLine(routeNum);
}
}
//add repsonse to busRoutecmb
busRoutecmb.DataSource = extractedRouteNums;
}
解决方案
你得到的基本上是一个 JSON 字符串,它只是一个名称值对数组或一个字典列表。
[{
"Description": "METRO Blue Line",
"ProviderID": "8",
"Route": "901"
},
{
"Description": "METRO Green Line",
"ProviderID": "8",
"Route": "902"
}]
您可以通过多种方式将该字符串反序列化为列表,一种是使用 System.Web.Script.Serialization.JavaScriptSerializer 或 JSON.NET。进入列表后,您可以查询该列表并仅返回路由键、值对。
var data = "[{ Description:\"METROBlueLine\",ProviderID:\"8\",Route:\"901\"},{Description:\"METRO Green Line\",ProviderID:\"8\",Route:\"902\"}]";
var ser = new System.Web.Script.Serialization.JavaScriptSerializer();
var mylist = ser.Deserialize<List<Dictionary<string,string>>>(data);
//or JSON.net
var mylist = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
var routes = mylist.SelectMany(a => a).Where(c => c.Key == "Route").ToList();
foreach (var route in routes)
Console.Write(route);
output
[Route, 901][Route, 902]
如果您真的只想要这些值,那么
var routesonly = routes.Select(r => r.Value).ToList();
推荐阅读
- reporting-services - 在 SSRS 中使用查找
- php - 将 HTML 表中的多行插入数据库
- ruby-on-rails - ActiveResource ArgumentError(期望的属性能够转换为 Hash
- java - 如何在 Firebase 存储的网格视图中设置图像,因为图像的名称和 url 不断变化?
- python - 如何将条件输出存储在数据框中
- c++ - Simple way to iterate and transfer data from linear array to array of vec3
- java - 添加参数后,使用泛型返回类型覆盖方法失败
- directshow - 在 DirectShow 中制作记分牌和其他动态图形
- c++ - C++ WinAPI。列表框中的文本显示错误
- php - 用数组选择喜欢的地方