我有以下功能。它应该从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)")
}
}
答案 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]
,所以不需要任何进一步的向下转换。