解析嵌套的JSON与Alamofire 4
所以我一直在试图整天使用Alomofire 4我的WordPress REST API解析JSON,我已经试过所有我能找到的是/是与我的问题但我仍然不能管理解决我的问题。解析嵌套的JSON与Alamofire 4
我们的目标仅仅是从API执行请求并将其打印出来,从那里我可以管理,但由于JSON似乎有嵌套的数组/字典,我很难搞清楚要使用什么。
我的代码:
Alamofire.request(_newsURL).responseJSON { response in
print(response.result)
if let json = response.result.value as? [Any] {
print("JSON: \(json)")
}
if let dict = response.result.value as? Dictionary<String, AnyObject>{
print(response.result.value)
if let slug = dict["slug"] as? String {
self._newsSlug = slug
}
print("Hello News")
print(self._newsURL)
print(self._newsSlug)
} else {
print("Found Nothing")
}
}
的API:http://www.wsvh.nl/wp-json/wp/v2/posts
我的目标是简单地调用,并打印出的东西,如标题(这是BTW还嵌套更?)。我试图让它与slug一起工作,因为我不像所呈现的标题那样嵌套,所以我想我应该从最简单的部分开始,但我甚至无法设法让它工作。
在此先感谢。
该API返回一个阵列字典,其中每个字典表示[String: Any]
类型的邮政:
Alamofire.request(_newsURL).responseJSON { response in
if let posts = response.result.value as? [[String: Any]] {
posts.forEach { post in
if let slug = post["slug"] as? String {
print("Slug: \(slug)")
}
if let title = post["title"] as? [String: String] {
print("Title: \(title["rendered"])")
}
if let categories = post["categories"] as? [Int] {
print("Categories: \(categories)")
}
// You can retrieve as many field as you like as above...
}
}
}
我强烈建议你利用的对象映射库的诸如ObjectMapper
所以你不必担心类型检查或铸造。
只需创建一个名为Post
模型:
import ObjectMapper
class Post: Mappable, CustomStringConvertible {
var title: String?
var slug: String?
var link: URL?
var content: String?
required init?(map: Map) {}
func mapping(map: Map) {
title <- map["title.rendered"]
slug <- map["slug"]
link <- (map["link"], URLTransform())
content <- map["content.rendered"]
}
var description: String {
return "Post <\(title ?? "No title")>"
}
}
,所以你可以检索的所有帖子如下:
import AlamofireObjectMapper
Alamofire.request("http://www.wsvh.nl/wp-json/wp/v2/posts")
.responseArray { (response: DataResponse<[Post]>) in
// This will give you the array of Post objects.
print("Posts: \(response.result.value)")
}
我为您创建了一个example project。您可以下载并使用它来更好地了解如何执行映射。
对于这种类型的任务,我建议你使用SwiftyJSON。它会帮助你保持简单和干净的事情。 例如
Alamofire.request(_newsURL).responseJSON(completionHandler: {
response in
if let value = response.result.value {
let json = JSON(value) //Don't forget to import SwiftyJSON
debugPrint(json)
debugPrint(json[0]["slug"].stringValue) //print value of slug property
debugPrint(json[0]["title"]["rendered"].stringValue) //print nested value of title
}
})
哦,哇,这真的很好!我只是想知道,为了使标题变为var,我需要做些什么,所以我可以使用它来操纵TableView? – Flowne
最后,打印出的请求!但是,我的最终目标是将其制作为tableview,因此我需要使Title成为一个var,以便我可以使用它来操作文本。但试图使标题变成一个变种给我和错误,因为它不是一个字符串。 – Flowne
神圣莫里!非常感谢你:D这完全解决了我所有的问题,为你节省了我最大的头痛。 – Flowne