2015-11-26 87 views
0

我已經建立了連接,但是我無法從天氣數組中獲取描述。因爲它是一個數組中的字典在Swift中解析來自OpenWeatherMap的JSON

{"weather": 
[{"id":801,"main":"Clouds","description":"few clouds","icon":"02n"}]} 

獲取溫度正常工作是這樣的:在先進的

if let main = item["main"] as? NSDictionary { 
      println("Main existe") 
      if let temp = main["temp"] { 
       println("Temp existe") 
       weatherRequested.append(temp.stringValue) 
      } 
     } 

感謝任何幫助,您可以給我。

回答

3

我最終制定出一個解決方案:

if let item = jsonResult as? NSDictionary { 

     if let weather = item["weather"] as? NSArray{ 
      if let value = weather[0] as? NSDictionary{ 
       if let description = value["description"] as? String{ 
        weatherRequested.append(description) 
       } 
      } 
     } 
     if let main = item["main"] as? NSDictionary { 
      if let temp = main["temp"] { 
       weatherRequested.append(temp.stringValue) 
      } 
     } 
    } 

感謝的人誰試圖幫助我反正! :)

+1

)您將'value [「description」]轉換爲?NSMutableString',然後再將其轉換爲'String'。沒有任何意義,您應該直接將其轉換爲作爲字符串 – Moritz

+0

它沒有讓我直接從NSDictionary轉換爲字符串,必須先通過NSMutableString。它正在正常工作。 –

+0

您應該直接將'value [「description」]'作爲'String'而不是'作爲'NSMutableString'。然後你不必在'append'中再次投射 – Moritz

3

iOS中使用Swift進行默認的JSON解析非常糟糕。我建議你使用SwiftyJSON庫。這將使解析它像...

let result = JSON(jsonResult) 
let weatherDesc = result["weather"]["description"].stringValue 
let weatherTemp = result["main"]["temp"].stringValue 

希望幫助!

+0

我讀過蘋果拒絕應用程序,因爲他們不喜歡使用第三方庫,所以我試圖避免使用這樣的庫和堅持蘋果的東西,即使它的一點點更復雜/ painfull –

+0

@PabloDuque:不,我已經有一個應用程序商店使用這個庫和許多其他應用程序! – mohonish

+0

哦,太棒了!對於愚蠢的問題抱歉,但我該如何恰當地導入這樣的圖書館? :S謝謝 –

0

你有

if let item = jsonResult[0] as? NSDictionary { 

jsonResult是一個NSDictionary不是數組是錯誤的。刪除「[0]」,然後再試一次

+0

仍然不能正常工作:( –