我忙着/学习Swift和JSON atm,并且正确地解决了我的响应问题。swift:将传入的json数组转换为字典和对象
所以,我想实现的是通过Alamofire请求显示“帖子”列表。我没有任何问题显示“第一级”json项目,如后ID或“消息”,但是当涉及到作者数组时,我有点失落。
JSON响应进来作为没有名称的数组,因此第一[
[
-{
__v: 1,
_id: "54428691a728c80424166ffb",
createDate: "2014-10-18T17:26:15.317Z",
message: "shshshshshshshhshshs",
-author: [
-{
_id: "54428691a728c80424166ffa",
userId: "543270679de5893d1acea11e",
userName: "foo"
}
]
}
这是我的相应的VC:
Alamofire.request(.GET, "\(CurrentConfiguration.serverURL)/api/posts/\(CurrentConfiguration.currentUser.id)/newsfeed/\(CurrentConfiguration.currentMode)",encoding:.JSON)
.validate()
.responseJSON {(request, response, jsonData, error) in
let JSON = jsonData as? NSArray
self.loadPosts(JSON!)
}
tableView.delegate = self
tableView.dataSource = self
}
func loadPosts(posts:NSArray) {
for post in posts {
let id = post["_id"]! as NSString!
let message = post["message"]! as NSString!
var authorArray = post["author"]! as? [Author]!
println(authorArray)
var author:Author = Author()
author.userName = "TEST ME"
var postObj:Post = Post()
postObj.id = id
postObj.message = message
postObj.author = author
uppDatesCollection.append(postObj)
}
println(self.uppDatesCollection.count)
dispatch_async(dispatch_get_main_queue()) {
self.tableView.reloadData()
}
}
我的模型帖子
class Post {
var id:String!
var message:String!
var createDate: NSDate!
var author:Array<Author>!
init() {
}
}
和作者
class Author {
var id:String?
var userId:String?
var userName:String?
init() {
}
这里最好的方法是什么?你应该重新返回Array作为一个字典,然后通过.valueforkey访问它?你以某种方式遍历数组来获取这些东西吗?
显然,你不能说 author.name = authorArray [3]作为字符串
非常感谢您的回答!有没有更通用的方法来做到这一点,无论是板载或基于库?通过迭代Array(我很乐意实现),理论上我可以用8x嵌套来实现对我来说听起来相当丑陋的函数。 – longbow 2014-10-18 21:14:30
当然,你可以在这方面做些事情,但是如果没有看到一个能够证明这个JSON丰富的例子,很难说。您可能希望在完全数据驱动和实用性之间取得平衡。也许放弃一下吧,让我们知道你是怎么走的。如果经过您的诚意努力,您仍然有疑问,请在s.o上发布新问题。 – Rob 2014-10-18 21:26:45