2017-01-19 20 views
0

これは、JSONです:気象APIからjsonを取得できません。 iOSの

{ 
"main":{ 
    "temp":-11.67, 
    "pressure":1040.21, 
    "humidity":73, 
    "temp_min":-11.67, 
    "temp_max":-11.67, 
    "sea_level":1055.37, 
    "grnd_level":1040.21 
}, 
"id":3099213, 
"name":"London", 
"cod":200 
} 

ラインself.cityName = cityにエラーがある私は、JSONファイルを持っていると私は"name": "London" (London)の値をとり、変数cityNameでそれを保存したいが、それは動作しません。 。 [String : AnyObject]の値をタイプに割り当てることができませんString!

たとえば、次はJSONからの可変度の温度に保存して、温度を正しく表示して温度を表示する必要があります。

この"name":"London"値を選択して変数に保存する方法がわかりません。 私は変更して入れ、この:私は関係のないタイプ'String''[String : AnyObject]'からキャストを警告持っself.cityName = city as! String

常に失敗します。

var cityName: String! 

let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! [String : AnyObject] 


       if let main = json["main"] as? [String : AnyObject] { 
        if let temp = main["temp"] as? Int { 
         self.degree = temp 
        } 
       } 
       if let city = json["name"] as? [String : AnyObject] { 
        self.cityName = city 
       } 
} 
+0

'{ "天気":[ { "ID":701、 "メイン": "ミスト"、 "説明": "ミスト"、 "アイコン": "50N" } } ////////////////////// 天気= json ["天気"]を? [文字列:AnyObject] { someWeather = weather ["main"]とすれば?文字列{ self.weatherDescription = someWeather } 変数weatherDescriptionにjsonの "main"または "description"の値を保存する方法は? 私はこのコードのようにしてみてください、それは – Ciechan

答えて

0
if let city = json["name"] as? [String : AnyObject] { 
     self.cityName = city 
    } 

は現在のところ」

if let city = json["name"] as? String { 
     self.cityName = city 
    } 
+0

'{ "天気" 私には何も表示されません:[ { "ID":701、 "メイン": "ミスト"、 "説明":"霧"、 "アイコン ":" 50n " } } ////////////////////////////////////////////////////// let weather = json ["weather"]? [文字列:AnyObject] { someWeather = weather ["main"]とすれば?文字列{ self.weatherDescription = someWeather } 変数weatherDescriptionにjsonの "main"または "description"の値を保存する方法は? 私はこのコードのようにしようとしていますが、何も表示されません – Ciechan

+0

別の質問を投稿してください。書式なしのコメントでJson形式を理解するのは非常に難しいです。 – Sander

0

に交換してくださいStringcityであるcityNameを割り当てようとしていますが、これはタイプがです。代わりに、このようcityNameに割り当てる前にStringにキャスト:「任意の」値型の文字列-basdキーと値の辞書オブジェクトのためのスウィフトの標準である私は、さらに[String : Any][String : AnyObject]を交換しました

var cityName: String! 

let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! [String : Any] 

if let main = json["main"] as? [String : Any], 
    let temp = main["temp"] as? Int { 
    self.degree = temp 
} 

if let city = json["name"] as? String { 
    self.cityName = city 
} 

注意を。また、ステートメントの間に,を使用して複数の値を1つの条件にアンラップすることで、冗長if letのネストを削除しました。

関連する問題