Мне нужно прочитать json-файл в C# (winforms), но у меня возникают некоторые проблемы.Как пропустить определенный токен из объекта json?
это является simplyfied содержимое файла: содержит 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;
}
}
После этого кода, кратчайший содержит 246047, так что это работает. Но токен переменной содержит все ноги для этого файла, а не только первый отрезок кратчайшего маршрута.
Я надеялся, что у вас будет указатель на переменную, который содержит только шаги для этапа кратчайшего маршрута, поэтому я мог бы пропустить этот токен.
Возможно, у меня все это неправильно, и это просто не работает?
Как я могу пройти через кратчайшие пути?
EDIT: Я пробовал другой подход, но с теми же результатами. Это мой второй подход:
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++;
}
После этого переменная лексема еще содержит все ноги всех маршрутов.
наклоняет скомпилировать «Еогеасп (JToken шаг с шагом)», компилятором сай: Еогеасп оператор не может работать с переменными «варом» типа, потому что «вар» делает не содержит общедоступного определения для «GetEnumerator» – GuidoG
обновленный ответ вам нужен IEnumerable шагов вместо шагов var –
Он работает, спасибо – GuidoG