0
我需要在c#(winforms)中讀取json文件,但我遇到了一些麻煩。如何從json對象中遍歷某個標記?
這是該文件的內容simplyfied: 它包含兩條路線,每條路線有一條腿和一個或多個步驟
{
"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,所以這個工程。 但可變令牌包含此文件的所有支腿,而不僅僅是最短路線的第一條支腿。
我希望最終得到一個只包含最短路徑腿的步驟的可調整令牌,所以我可以循環這個令牌。
也許我有這一切都錯了,它只是不這樣工作?
如何循環執行最短路徑的步驟?
編輯: 我嘗試了另一種方法,但結果相同。 這是我的第二個方法:
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一步步)」,編譯器最高審計機關:foreach語句無法在類型「變種」的變量操作,因爲「變種」呢不包含'GetEnumerator'的公共定義 – GuidoG
更新的答案您需要IEnumerable步驟而不是var步驟 –
它的工作原理,謝謝 – GuidoG