在Swift中,检查JSON中是否存在密钥

时间:2015-09-18 17:47:20

标签: json swift2

我有以下功能。它应该从API网页获取当前歌曲播放信息。播放歌曲时,页面显示:

  

{"艺术家" :"艺术家","歌曲" :" Song" }

当没有可用数据时(没有播放歌曲):

  

{"错误" :"没有提供歌曲元数据" }

有没有办法检查"错误"关键存在?或者我该怎么处理这个问题?

func songNowPlaying() {
    let endpoint = NSURL(string: "http://api.vicradio.org/songs/current")
    let jsonData = NSData(contentsOfURL: endpoint!)

    do {
        let parsed = try NSJSONSerialization.JSONObjectWithData(jsonData!, options: NSJSONReadingOptions.MutableContainers) as! NSMutableArray
        SongNowText.text = parsed.valueForKey("song").componentsJoinedByString("")
        ArtistNowText.text = parsed.valueForKey("artist").componentsJoinedByString("")
    }
    catch let error as NSError {
        print("\(error)")
    }
}

1 个答案:

答案 0 :(得分:4)

URL返回JSON字典而不是数组。您可以通过这种方式检查这两种情况

func songNowPlaying() {
  let endpoint = NSURL(string: "http://api.vicradio.org/songs/current")
  if let jsonData = NSData(contentsOfURL: endpoint!) {

    do {
      let parsed = try NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers) as! [String:String]
      if let error = parsed["error"] {
        print("Result error: \(error)")
      } else {
        if let song = parsed["song"] { 
          SongNowText.text = song 
        }
        if let artist = parsed["artist"] { 
          ArtistNowText.text = artist
        }
      }
    }
    catch let error as NSError {
      print("Serialization error: \(error)")
    }
  }
}

因为JSON对象可以被追溯到[String:String],所以不需要任何进一步的向下转换。