2017-09-21 39 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 ...)在那裏。根據您的要求,更改該值。

如果讓我們檢查可選項,最好添加它。因爲有這麼多的轉換。如果在任何轉換中失敗,它將會崩潰。