在Swift中访问* remote * JSON深层嵌套对象
问题描述:
Swift中的远程JSON解析对我来说是新的,我花了数周的时间来试图解决这个问题。在Swift中访问* remote * JSON深层嵌套对象
我从拉JSON是这个家伙: http://www.odysseynewsmagazine.net/wp-json/wp/v2/posts?_embed
我试图去说,“SOURCE_URL”为每个岗位的图像,但它嵌套在嵌套在“media_details”“内wp:featuredmedia“嵌套在”_embedded“中,我只是不断收到错误。
我写的代码看起来是这样的:
func parseData() {
fetchedSlug = []
//from odyssey site
let url = "http://www.odysseynewsmagazine.net/wp-json/wp/v2/posts?_embed"
var request = URLRequest(url: URL(string: url)!)
request.httpMethod = "GET"
let configuration = URLSessionConfiguration.default
let session = URLSession(configuration: configuration, delegate: nil, delegateQueue: OperationQueue.main)
let task = session.dataTask(with: request) { (data, response, error) in
if error != nil {
print("Error")
}
else {
do {
let fetchedData = try JSONSerialization.jsonObject(with: data!, options: .mutableLeaves) as! NSArray
//Json objects to variables
for eachFetchedSlug in fetchedData {
let eachSlug = eachFetchedSlug as! [String: Any]
let slug = eachSlug["slug"] as! String
let link = eachSlug["link"] as! String
self.fetchedSlug.append(Slug(slug: slug, link: link))
}
self.slugTableView.reloadData()
}
catch {
print("Error2")
}
}
}
task.resume()
}
}//end of VC Class
class Slug {
//define variables
let slug: String?
let link: String?
init(slug: String?, link: String?) {
self.slug = slug
self.link = link
}
//creating dictionaries from Json objects
init(slugDictionary: [String : Any]) {
self.slug = slugDictionary["slug"] as? String
link = slugDictionary["link"] as? String
}
}
我也将需要这是在“渲染”中的“标题”发现每个帖子的标题。
所有这些信息都是在tableView中的可重复使用的自定义单元格中填充标签。我可以填充slug和链接标签,但不能嵌套任何信息。
怎么了“嵌入”之前的下划线?这就是为什么我无法得到任何东西?我可以让它消失吗?我不允许下载插件或运行自定义脚本,直到向他们展示正在运行的应用程序。
答
请检查下面的代码:
for eachFetchedSlug in fetchedData {
let eachSlug = eachFetchedSlug as! [String: Any]
let slug = eachSlug["slug"] as! String
let link = eachSlug["link"] as! String
self.fetchedSlug.append(Slug(slug: slug, link: link))
let title = eachSlug["title"] as! [String: Any]
let rendered = String(describing: title["rendered"])
print(rendered) // this is title
let embedded = eachSlug["_embedded"] as! [String: Any]
let wpfeaturedmedias = embedded["wp:featuredmedia"] as! [Any]
for wpfeaturedmedia in wpfeaturedmedias {
let featuredmedia = wpfeaturedmedia as! [String: Any]
let mediaDetails = featuredmedia["media_details"] as! [String: Any]
let mediaDetailsSize = mediaDetails["sizes"] as! [String: Any]
let mediaDetailsSizeThumbnail = mediaDetailsSize["thumbnail"] as! [String: Any] // getting only thumbnail. Based on you requirement change this to
let image = String(describing: mediaDetailsSizeThumbnail["source_url"])
print(image) // this is image
}
}
我添加的代码只检索thumbnail
。在sizes
这么多类型(medium
,medium_large
...)在那里。根据您的要求,更改该值。
如果让我们检查可选项,最好添加它。因为有这么多的转换。如果在任何转换中失败,它将会崩溃。
有没有办法解决插件?他们非常坚定地希望在他们弄糟wordpress网站之前能够正常工作。我需要证据证明没有别的办法。 –