2017-01-11 34 views
0

我從天氣API獲取數據,我想只返回特定數據,讓我們說溼度不是整個對象。C#和天氣API,獲取特定數據

public Object getWeatherForcast() 
    { 
     string url = "http://api.openweathermap.org/data/2.5/weather?q=Aalborg&APPID=appid&units=imerial"; 

     var client = new WebClient(); 
     var content = client.DownloadString(url); 
     var serializer = new JavaScriptSerializer(); 
     var jsonContent = serializer.Deserialize<Object>(content); 

     //here if I use only jsonContent it returns all data, unfortunately I don t know how to get 
     //the specific data 
     return jsonContent.main.humidity; 


    } 
這裏

,如果我只用jsonContent它返回的所有數據,不幸的是我不知道怎麼去 具體數據

enter image description here

enter image description here

+0

返回之前,你可以使用類似LINQ和只選擇:如果您使用Newtonsoft.Json庫反序列化JSON,使用dynamic還有,你可以使用性能得到類似下面,清潔樣本,訪問數據溼度。快速和骯髒的伎倆,我相信其他答案會更好。 – RandomStranger

+0

你還可以發佈從API獲得的JSON字符串嗎? – Mahdi

+0

@Mahdi這是你需要的嗎?我編輯了這篇文章。 –

回答

0

而是反序列化的類型Object,建議您反序列化到您自己的對象類型,如天氣報告或類似的東西,所以你可以做這樣的事情:

WeatherReport report = serializer.Deserialize<WeatherReport>(content); 

這對你來說很容易。

反正給你有什麼權利在那裏,你可以做這樣的事情:

jsonContent.main[2].ToString(); //Or whatever other method or property you prefer 
+0

同樣的問題,對象不包含「主」的定義... 「ToString()」似乎沒有幫助... –

+0

嘗試jsonContent [3] [2] .ToString(); – NicoRiff

+0

'var client = new WebClient(); var content = client.DownloadString(url); var serializer = new JavaScriptSerializer(); var jsonContent = serializer.Deserialize (content); return jsonContent [3] [2] .ToString();' 你應該看起來像這樣的代碼?消息是「無法將索引與[]應用於類型爲」object「的解壓縮 –

0

這將是更好的準備表示要從JSON讀取數據的類(ES),如已經提到的,但如果你想保留它自己的方式,或者只是讀取單個值(例如,從「主」節溼度),你可以使用dynamic與下面的一小段代碼:

var jsonContent = serializer.Deserialize<dynamic>(content); 
var humidity = jsonContent["main"]["humidity"]; 

編輯

對你而言,JavaScriptSerializer將對象反序列化爲Dictionary<string, object>,因此你必須使用索引器訪問它的屬性,如上所示。

var jsonContent = JsonConvert.DeserializeObject<dynamic>(content); 
humidity = jsonContent.main.humidity;