如何在Swift 2.0中解析此特定JSON数据

如何在Swift 2.0中解析此特定JSON数据,json,swift,api,parsing,swift2,Json,Swift,Api,Parsing,Swift2,我正在尝试从API解析Json数据: { "title": "Mr. Robot", "first_aired": "2015-06-24", "network": "USA Network", "channels": [ { "id": 12, "name": "USA", "short_name": "usa", "channel_type": "t

我正在尝试从API解析Json数据:

{
    "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()
    }
}
当我使用上面的代码时,我得到一个错误“条件绑定的初始值设定项必须具有可选类型,而不是“if let jsonArray=JsonData”行前面的“AnyObject”。我尝试了一些在StackOverflow上看到的方法,比如链接中的方法: [
但这对我来说不起作用。我对Swift还是有点陌生,我真的不想使用SwiftyJSON。这是解析JSON数据的最佳方法还是有更好的方法呢?

因为你已经使用了NSJSONSerialization和
try!
(注意
,这意味着它是被迫的)
JSONData
的值不是可选的:如果让jsonArray=JSONData,则不必使用
将其展开

如果仍然需要可选值,请改用
try?


否则,您也可以在
do catch
块中使用
try
来处理可能的错误。

JSONData的类型未知,需要知道它是以下for循环的数组

使用:

您不需要:

if let jsonArray = JSONData {
因为如果前面的
try!

你在以下方面做得更好:

do {
    let jsonArray = try NSJSONSerialization.JSONObjectWithData(data!, options:[]) as! NSArray
    for j in jsonArray {
        // ...
    }
} catch {
    // handle error
}
因为您无法控制接收到的JSON,并且由于服务器更改而崩溃不是一个好主意


另外,在命名变量方面也确实花了一些时间,
JSONData
不是数据,它是通过解析JSON字符串获得的数组。

是否愿意分享导致错误的语句?提示:在Xcode中,您可以通过选择它和control-i来重新缩进代码。良好的缩进可以使代码更容易理解。这是一行:if let jsonArray=JSONData{jsonArray中的j{let title=jsonResult[“title”]as!String…}感谢您的缩进,tipI尝试使用您显示的代码,但出于一些奇怪的原因在“jsonArray中的j”上第行出现错误“使用未解析标识符”jsonArray“”。奇怪,因为我知道在它上面的一行中,jsonArray被赋予了一个值。
do {
    let jsonArray = try NSJSONSerialization.JSONObjectWithData(data!, options:[]) as! NSArray
    for j in jsonArray {
        // ...
    }
} catch {
    // handle error
}