如何在Swift 2.0中解析此特定JSON数据
我正在尝试从API解析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
{
"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
}