我为学习目的创建了一个小应用程序,应该从JSON文件中获取数据并将其显示在tableview中。
我不确定如何从JSON访问我的数据。如果有人可以帮助我,那会更高兴。
[
{
"title": "dolore laboris ea adipisicing",
"description": "Ullamco adipisicing aute deserunt id do eu aliqua deserunt deserunt quis elit. Irure excepteur aliquip mollit tempor. Minim est nisi aute do tempor nisi aliquip pariatur. Laboris qui duis consequat magna qui. Proident nisi duis Lorem officia eiusmod exercitation aliqua dolore sunt esse sunt consectetur ut.",
"images": [
{
"index": 0,
"title": "laborum minim deserunt elit",
"pubDate": 1421120486130,
"picture": "http://lorempixel.com/500/500/nightlife/",
"caption": "deserunt proident cillum laboris duis ut minim est"
},
这是我的JSON文件,我想访问属性标题以及图片。
我在做什么:
我有Parser类来访问JSON
与基本网址一致
正在打电话的功能
func getRandomUser(onCompletion: (JSON) -> Void) {
let route = baseURL
makeHTTPGetRequest(route, onCompletion: { json, err in
onCompletion(json as JSON)
})
}
and a normal **makeHTTPGetRequest** function.
And this is how i try to fill my table
func addDummyData() {
RestParser.sharedInstance.getTableViewData { json in
let results = json["images"]
for (index: String, subJson: JSON) in results {
let user: AnyObject = subJson["images"].object
self.items.addObject(user)
dispatch_async(dispatch_get_main_queue(),{
tableView?.reloadData()
})
}
}
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.items.count;
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("CELL") as? UITableViewCell
if cell == nil {
cell = UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "CELL")
}
let user:JSON = JSON(self.items[indexPath.row])
let picURL = user["picture"].string
let url = NSURL(string: picURL!)
let data = NSData(contentsOfURL: url!)
cell!.textLabel?.text = user["title"].string
cell?.imageView?.image = UIImage(data: data!)
return cell!
}
没有太大成功..我没有得到任何回报
我如何尝试调用数据
func getTableViewData(onCompletion:(JSON) -> Void){
let route = baseURL
makeHTTPGetRequest(route, onCompletion: { json, err in
onCompletion(json as JSON)
})
}
答案 0 :(得分:1)
您似乎正在使用SwiftyJSON类来处理JSON字符串。
这里有一个解决方案,假设如下:
具有此声明的变量
var items : [JSON]()
函数RestParser.sharedInstance.getTableViewData
返回SwiftyJSON兼容数据
images
函数addDummyData
通过图像数组进行迭代,并将JSON.dictionaries对象添加到items
func addDummyData() {
RestParser.sharedInstance.getTableViewData { json in
let results = json["images"]
for (index: String, user: JSON) in results {
items.append(user)
}
dispatch_async(dispatch_get_main_queue(),{
tableView?.reloadData()
})
}
}
函数tableView:cellForRowAtIndexPath
照常创建单元格,并将属性title
和picture
分配给相应的单元格属性。
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("CELL") as? UITableViewCell
if cell == nil {
cell = UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "CELL")
}
let user = items[indexPath.row]
if let picURL = user["picture"].string, url = NSURL(string: picURL) {
if let data = NSData(contentsOfURL: url) {
cell!.imageView?.image = UIImage(data: data)
}
}
cell!.textLabel?.text = user["title"].string
return cell!
}
答案 1 :(得分:0)
您的JSON正在返回一个数组,因此您需要遍历该数组才能访问其项目。
func addDummyData() {
RestParser.sharedInstance.getTableViewData { json in
// Iterate through the JSON response array
for results in json {
// You can now use the results objects to get "images" etc objects from the json.
}
}