[英]Parse JSON Swift TableView
我想從這個 JSON URL ( https://www.kimonolabs.com/api/7flcy3qm?apikey=gNq3hB1j0NtBdAvXJLEFx8JaqtDG8y6Y ) 中提取“事件”、“哈斯塔”和“位置”,但我正在努力解決如何做它? 誰能幫我? 這是我的代碼......然后我想用這三個填充一個tableview。
override func viewDidLoad() {
super.viewDidLoad()
splitViewController!.preferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible
UINavigationBar.appearance().barTintColor = UIColor(red: 52.0/255.0, green: 170.0/255.0, blue: 220.0/255.0, alpha: 1.0)
UINavigationBar.appearance().tintColor = UIColor.whiteColor()
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.whiteColor()]
let url = NSURL(string:"https://www.kimonolabs.com/api/7flcy3qm?apikey=gNq3hB1j0NtBdAvXJLEFx8JaqtDG8y6Y")!
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(url) { (data, response, error) -> Void in
if error != nil {
print(error)
} else {
if let data = data {
do {
let jsonResult = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers) as? NSDictionary
if jsonResult!.count > 0 {
if let results = jsonResult!["results"] as? NSDictionary, collection2 = results["collection2"] as? NSArray {
for entry in collection2 {
if let dict = entry["Event"] as? NSDictionary {
print(dict)
}
else if let array = entry as? NSArray {
} else {
}
}
if let items = jsonResult?["Date"] as? NSArray {
print(items)
}
}
}
} catch {
print("In catch block")
}
}
}
}
task.resume()
}
用 Swift 解析 JSON 簡直是地獄。 您可以使用SwiftyJSON輕松做到這一點。
使用您的 JSON:
// Get content of json url
let jsonString = try NSString.init(contentsOfURL: url!, encoding: NSUTF8StringEncoding)
// Create JSON object from data
let json = JSON(data: jsonString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!)
// Check if array for key "collection2" exists
if let collection2 = json["results"]["collection2"].array {
// Create JSON array from it and loop for each object
for (key, subJson):(String, JSON) in JSON(collection2) {
// Check if dictionary for key "Event" exists
if let event = subJson["Event"].dictionary {
print(event)
}
// Check if string for key "Hasta" exists
if let hasta = subJson["Hasta"].string {
print(hasta)
}
// Check if string for key "Location" exists
if let location = subJson["Location"].string {
print(location)
}
}
}
我創建了這個在線實用程序 ( http://www.json4swift.com ),它將您的 json 轉換為 swift 可表示的模型,您可以像這樣輕松地操作:
// Get content of json url
let jsonString = try NSString.init(contentsOfURL: url!, encoding: NSUTF8StringEncoding)
// Create JSON Dictionary from data
var jsonResult = NSJSONSerialization.JSONObjectWithData(jsonString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, options: NSJSONReadingOptions.MutableContainers, error: &err) as NSDictionary
//Create instance for base model representation
let responseModel = Json4Swift_Base(dictionary: jsonResult)
//print name
print(responseModel!.name)
//Get the collection2 from result
let collection2 = responseModel?.results!.collection2
//Get the first object from collection 2
let firstObject = collection2?.first
//Print the event and hesta
print(firstObject?.event?.text)
print(firstObject?.hasta)
在 tableview 的情況下,您將實現委托方法 cellForRowAtIndexPath
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("YourCellIdentifier")
if cell == nil {
cell = UITableViewCell()
}
//Assuming you have responseModel instantiated earlier
let collection2 = responseModel?.results!.collection2!
//Get the n'th object from collection 2
let object = collection2[indexPath.row]
//Populate the cell the event and hesta
cell.textLabel?.text = object?.event?.text
cell.detailTextLabel?.text = object?.hasta
return cell
}
免責聲明:將上述更多視為偽代碼,未經實際測試,但為您提供有關處理的想法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.