2017-09-21 37 views
0

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和链接标签,但不能嵌套任何信息。

怎么了“嵌入”之前的下划线?这就是为什么我无法得到任何东西?我可以让它消失吗?我不允许下载插件或运行自定义脚本,直到向他们展示正在运行的应用程序。

回答

0

安装更好的REST API特色照片插件

Screenshot

+0

有没有办法解决插件?他们非常坚定地希望在他们弄糟wordpress网站之前能够正常工作。我需要证据证明没有别的办法。 –

0

请检查下面的代码:

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 ...)在那里。根据您的要求,更改该值。

如果让我们检查可选项,最好添加它。因为有这么多的转换。如果在任何转换中失败,它将会崩溃。