2016-08-11 10 views
0

Как я могу получить авторов из книги Google с JSON в Swift? Этот код работает, но у меня проблема с авторами.Получить JSON Google Книги - IOS

Это пример JSON:

{ 
"kind": "books#volume", 
"id": "17BYrgEACAAJ", 
"etag": "snlcLszwWRo", 
"selfLink": "https://www.googleapis.com/books/v1/volumes/17BYrgEACAAJ", 
"volumeInfo": { 
    "title": "Scomparso. Dave Brandstetter mysteries", 
    "authors": [ 
    "Joseph Hansen" 
    ], 
    "publisher": "Elliot", 
    "publishedDate": "2012-01", 

FUNC getBookInfo:

func getBookInfo(isbn: String) { 

     let url_book = "https://www.googleapis.com/books/v1/volumes?q=isbn:" + isbn 

     if let url = NSURL(string: url_book) { 
      NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: {data, _, error -> Void in 
       if let error = error { 
        print(error.localizedDescription) 
       } else { 
        let data = data, 
        jsonResult = try? NSJSONSerialization.JSONObjectWithData(data!, options: []), 
        arrayOfTitles = jsonResult!.valueForKeyPath("items.volumeInfo.title") as? [String], 
        arrayOfAuthors = jsonResult!.valueForKeyPath("items.volumeInfo.authors") as? [String], 
        arrayOfPublishers = jsonResult!.valueForKeyPath("items.volumeInfo.publisher") as? [String], 
        arrayUrlImageBook = jsonResult!.valueForKeyPath("items.volumeInfo.imageLinks.smallThumbnail") as? [String] 
        self.titles = arrayOfTitles!.joinWithSeparator(", ") 
        self.authors = arrayOfAuthors!.joinWithSeparator(", ") 
        self.publishers = arrayOfPublishers!.joinWithSeparator(", ") 
        let url_image_book: String! = arrayUrlImageBook!.joinWithSeparator(", ") 
        self.title_label.text = self.titles 
        self.author_label.text = self.authors 
        if self.publishers != nil{ 
         self.publisher_label.text = self.publishers 
        } 
        self.book_image.downloadedFrom(url_image_book!) 

       } 
      }).resume() 
     } 
    } 

Спасибо заранее.

+1

Убедитесь, что книга, которую вы просите у авторов, на самом деле имеет авторов. Этот код правильный и тот же, что я использую в одном из моих проектов, но не у всех книг есть авторы в их API – pbush25

+0

Да, эти авторы существуют. Я думаю, что ошибка может быть связана с массивом ["Joseph Hansen"] – Carlo

+0

Я собираюсь опубликовать некоторый код, который слишком длинный для комментария, но демонстрирует API, который работает и возвращает авторов так же, как вы Вот. Он протестирован и работает @Carlo – pbush25

ответ

1

Итак, чтобы получить авторов, я делаю что-то подобное, но немного другое.

Во-первых, я просто создать массив из всех книг, которые возвращаются в API для URL, который я посылаю к нему ...

if let volumeInfo = jsonResult.valueForKeyPath("items.volumeInfo") as? [AnyObject] { 
    if volumeInfo.count != 0 { 
     self.volumeInfo = volumeInfo 
     self.translateJSONData() //here is where I then translate the data 
    } 
} 

Тогда в моей функции перевода данных, я Переберите все результаты и получить значения, которые я хочу.

for apiResponse in self.volumeInfo { 
    if let singleVolumeInfo = apiResponse as? [String : AnyObject] { 
     let bookCategory = singleVolumeInfo["categories"] as? [String] 
     let bookAuthors = singleVolumeInfo["authors"] as? [String] 
     //more information here 
    } 
} 

Но этот код для получения авторов даст вам массив всех названий авторов.

+0

таким образом работает для меня. спасибо – Carlo