2017-04-01 9 views
0

私はそれがこのようになりますJSONから値を必要とする迅速Progrmammingと初心者です:スウィフトJSONの解析Wunderground

{ 
    "response": { 
    "version":"0.1", 
    "termsofService":"http://www.wunderground.com/weather/api/d/terms.html", 
    "features": { 
    "astronomy": 1 
    } 
    } 
     , "moon_phase": { 
     "percentIlluminated":"23", 
     "ageOfMoon":"5", 
     "phaseofMoon":"Erstes Viertel", 
     "hemisphere":"North", 
     "current_time": { 
     "hour":"8", 
     "minute":"28" 
     }, 
     "sunrise": { 
     "hour":"6", 
     "minute":"55" 
     }, 
     "sunset": { 
     "hour":"19", 
     "minute":"50" 
     }, 
     "moonrise": { 
     "hour":"9", 
     "minute":"50" 
     }, 
     "moonset": { 
     "hour":"0", 
     "minute":"06" 
     } 
    }, 
    "sun_phase": { 
     "sunrise": { 
     "hour":"6", 
     "minute":"55" 
     }, 
     "sunset": { 
     "hour":"19", 
     "minute":"50" 
     } 
    } 
} 

私は変数に日没と日の出から時間&分を取得します!

私のコード:私はプリント(sunriseData)と印刷(sunsetData)本から正しいデータを取得

var sunriseHour: [String] = [] 
    var sunriseMinute: [String] = [] 
    var sunsetHour: [String] = [] 
    var sunsetMinute: [String] = [] 

    override func viewDidLoad() { 
     super.viewDidLoad() 


     let url=URL(string:"http://api.wunderground.com/api/dbd539bd631e/astronomy/lang:DL/q/DL/iphofen.json") 
     do { 
      let allData = try Data(contentsOf: url!) 
      let data = try JSONSerialization.jsonObject(with: allData, options: JSONSerialization.ReadingOptions.allowFragments) as! [String : AnyObject] 
      if let arrJSON = data["moon_phase"] { 


         if let sunriseData = arrJSON["sunrise"]{ 



       print(sunriseData) 
             } 
       if let sunsetData = arrJSON["sunset"]{ 

      print(sunsetData) 
       } 
      } 
      print("hour: ",sunriseHour) 
      print("minute: ",sunriseMinute) 
      print("hour: ",sunsetHour) 
      print("minute: ",sunsetMinute) 


     } 
     catch { 

     } 

      } 

オプション({ 時間= 6; 分= 55 ;})オプション({ 時間= 19; 分= 50;}時間:[]分:[]時間:[]分:[]

どのように私は変数sunriseHour、sunriseMinute、sunsetHour、sunsetMinuteでそれを取得するのですか?

あなたの助けからありがとう!

答えて

0

すべてhourおよびminuteの値は、(単一)Stringではなく、[String](配列)です。 sunriseため

 let url = URL(string:"http://api.wunderground.com/api/dbd539bd631e/astronomy/lang:DL/q/DL/iphofen.json")! 

     let task = URLSession.shared.dataTask(with: url) { (data, response, error) in 
      if error != nil { 
       print(error!) 
      } else { 
       do { 
        guard let jsonData = try JSONSerialization.jsonObject(with:data!) as? [String:Any], 
          let moonPhase = jsonData["moon_phase"] as? [String:Any] else { return } 

        let sunrise = moonPhase["sunrise"] as! [String:String] 
        let sunset = moonPhase["sunset"] as! [String:String] 

        sunriseHour = sunrise["hour"]! 
        sunriseMinute = sunrise["minute"]! 

        sunsetHour = sunset["hour"]! 
        sunsetMinute = sunset["minute"]! 

        print("Sunrise - \(sunriseHour):\(sunriseMinute)" 
        print("Sunset - \(sunsetHour):\(sunsetMinute)" 

       } catch { 
        print(error) 
       } 
      } 
     } 
     task.resume() 

データとsunsetは辞書にあります。そして、リモートURLから同期してデータをロードしない

var sunriseHour = "" 
var sunriseMinute = "" 
var sunsetHour = "" 
var sunsetMinute = "" 

空の文字列として

宣言はすべての変数は、常に非同期の方法を使用しますmoon_phaseに由来します。日の出と日没が毎日存在するはずであるため、すべての値は強制的にアンラップされます。

PS:より具体的な変数名を定義することを検討してください。arrJSONはあまり意味がありません。

+0

あなたは私のヒーローです:-)ありがとう – Heisenberg

関連する問題