我需要在 c# (winforms) 中读取一个 json 文件,但我在这样做时遇到了一些麻烦。
这是文件的简单内容:它包含 2 条路线,每条路线都有一条腿和一个或多个步骤
{
"routes" : [
{
"legs" : [
{
"distance" : {
"text" : "246 km",
"value" : 246047
},
"steps" : [
{
"distance" : {
"text" : "2.4 km",
"value" : 2383
},
},
{
"distance" : {
"text" : "3.7 km",
"value" : 3697
},
},
],
}
],
},
{
"legs" : [
{
"distance" : {
"text" : "280 km",
"value" : 280048
},
"steps" : [
{
"distance" : {
"text" : "2.4 km",
"value" : 2383
},
},
{
"distance" : {
"text" : "6.9 km",
"value" : 3697
},
},
],
}
],
}
],
}
我需要做的是:
1.找到最短的路线(这是我设法做到的)
2.循环通过最短路线的步骤,这个我不知道怎么做
我查找最短路线的代码是这样的:
JObject o = JObject.Parse(content);
JToken token = null;
decimal distance = 0;
decimal shortest = 0;
JToken routes = o.SelectToken("routes");
foreach (JToken tempToken in routes.Children())
{
distance = (decimal)tempToken.SelectToken("legs[0].distance.value") / 1000;
if (distance < shortest || shortest == 0)
{
shortest = distance;
token = tempToken.SelectToken("legs[0]").First;
}
}
在此代码之后,shortest 包含 246047 因此可以工作。但是变量标记包含此文件的所有分支,而不仅仅是最短路由的第一条分支。
我希望最终得到一个可变令牌,该令牌仅包含最短路线的路段的步骤,因此我可以循环浏览此令牌。
也许我全错了,它只是不能那样工作?
如何循环通过最短路线的步骤?
编辑:我尝试了另一种方法,但结果相同。这是我的第二种方法:
int index = 0;
foreach (JToken tempToken in routes.Children())
{
distance = (decimal)tempToken.SelectToken("legs[0].distance.value") / 1000;
if (distance < shortest || shortest == 0)
{
shortest = distance;
token = o.SelectToken("routes[" + index.ToString() + "].legs[0]");
}
index++;
}
在此之后,变量令牌仍然包含所有路由的所有分支。
试试这个。它会让你循环通过最短腿的步骤
foreach (JToken tempToken in routes.Children())
{
distance = (decimal)tempToken.SelectToken("legs[0].distance.value") / 1000;
if (distance < shortest || shortest == 0)
{
shortest = distance;
IEnumerable<JToken> steps = tempToken["legs"].Children()["steps"].Children();
foreach (JToken step in steps)
{
var thisStep = step;
}
}
}