我试图从API解析Json Data:
{
"title": "Mr. Robot",
"first_aired": "2015-06-24",
"network": "USA Network",
"channels": [
{
"id": 12,
"name": "USA",
"short_name": "usa",
"channel_type": "television"
}
],
我使用的代码是:
var TVArray : [TVInfo] = []
var task : NSURLSessionTask?
func getJSON (urlString: String) {
let url = NSURL(string: urlString)!
let session = NSURLSession.sharedSession()
task = session.dataTaskWithURL(url) {(data, response, error) in
dispatch_async(dispatch_get_main_queue()) {
if (error == nil) {
self.updateJSON(data)
}
else {
}
}
}
task!.resume()
}
func updateJSON (data: NSData!) {
let JSONData = (try! NSJSONSerialization.JSONObjectWithData(data, options: []))
TVArray.removeAll(keepCapacity: true)
if let jsonArray = JSONData {
for j in jsonArray {
let title = jsonResult["title"] as! String
let firstAired = jsonResult["first_aired"] as! String
let network = jsonResult["network"] as! String
let channelName = JsonResult["channels"][0]["name"] as! String
let TV = TVInfo(title: title, firstAired: firstAired, network: network, channelName: channelName)
TVArray.append(TV)
}
}
collectionview.reloadData()
}
}
当我使用上面的代码时,我得到一个错误'条件绑定的初始化程序必须具有可选类型,而不是' AnyObject''在行前面如果让jsonArray = JsonData'。我已尝试过一些我在StackOverflow上看到过的方法,就像链接中的方法一样: [Parsing JSON in swift 2.0 但它对我没有用。我对Swift还有点新意,我真的不想使用SwiftyJSON。这是解析此JSON数据的最佳方法还是有更好的方法来实现它?
答案 0 :(得分:0)
由于您已将NSJSONSerialization与try!
一起使用(请注意!
,意味着它已被强制执行) JSONData
的值不是可选的:你不必用if let jsonArray = JSONData
打开它。
如果您仍想要可选值,请改用try?
。
否则您也可以在try
块中使用do catch
来处理可能的错误。
答案 1 :(得分:0)
JSONData
的类型未知,需要知道它是以下for循环的数组。
使用:
let JSONData = try! NSJSONSerialization.JSONObjectWithData(data!, options:[]) as! NSArray
您不需要:
if let jsonArray = JSONData {
因为如果JSONData是前一个try!
你最好用:
do {
let jsonArray = try NSJSONSerialization.JSONObjectWithData(data!, options:[]) as! NSArray
for j in jsonArray {
// ...
}
} catch {
// handle error
}
因为你无法控制你收到的JSON并因服务器更改而崩溃不是一个好主意。
同样真正花了一些时间来命名变量,JSONData
不是数据,它是通过解析JSON字符串获得的数组。