2016-10-27 2 views
0

Я пытаюсь извлечь книгу данные из API Google Books: https://www.googleapis.com/books/v1/volumes?q=isbn:9781451648546Swift не в состоянии вернуть точные данные из JsonResult

Я был в состоянии получить название книги, описание и эскиз, но я застрял на получение авторской и категориальной информации (без [""]).

Я получаю этот результат с предыдущей ссылке:

Author:["Walter Isaacson"] 
Categories:[""Biography & Autobiography""] 

    "volumeInfo": { 
    "title": "Steve Jobs", 
    "authors": [ 
    "Walter Isaacson" 
    ], 
    "publisher": "Simon and Schuster", 
    "publishedDate": "2011", 

и используя этот код на моем IOS приложения:

if let arrayOfAuthors = (jsonResult as AnyObject).value(forKeyPath: "items.volumeInfo.authors") as? [[String]] { 
      DispatchQueue.global(qos: .userInitiated).async { 
       // Bounce back to the main thread to update the UI 
       DispatchQueue.main.async { 
        self.authorLabel.text = "Author: \(arrayOfAuthors[0])" 
       } 
      } 

     } 
+0

Вы литья значение как массив массива строк с 'as? [[String]] 'Когда это должен быть просто массив строк, как? [String] ' – NSGangster

+0

используя' as? [String] 'я ничего не получил –

+0

Я могу опубликовать решение, используя [Object Mapper] (https://github.com/Hearst-DD/ObjectMapper). Если вы хотите использовать библиотеку для разбора JSON. –

ответ

0

Это работало для меня

func parseJSON(){ 
    let backgroundQueue = DispatchQueue.global(qos: DispatchQoS.QoSClass.default) 

    backgroundQueue.async(execute: { 

     let serverResponseJSON:NSDictionary = self.parseURLToResponseJSON(urlToRequest: "https://www.googleapis.com/books/v1/volumes?q=isbn:9781451648546") 
     print(serverResponseJSON) 
     let arrayOfauthors:NSArray = serverResponseJSON.value(forKeyPath: "items.volumeInfo.authors") as! NSArray 
     print(arrayOfauthors) 

     DispatchQueue.main.async { 
      self.authorLabel.text = "Author: \(arrayOfAuthors[0])" 
     } 
    }) 
} 

func parseURLToResponseJSON(urlToRequest: String) -> NSDictionary{ 
    let inputData = try? Data(contentsOf: URL(string: urlToRequest)!) 
    let boardsDictionary: NSDictionary = (try! JSONSerialization.jsonObject(with: inputData!, options: JSONSerialization.ReadingOptions.mutableContainers)) as! NSDictionary 
    return boardsDictionary 
}