実現したいこと
本のISBN情報のJSONデータを格納したいのですが、nilで返されてしまいます。
どこが間違っているかご指摘お願いできませんでしょうか?
使用しているAPIはGoogleBooksApiです。
JSON
1{ 2 "kind": "books#volumes", 3 "totalItems": 1, 4 "items": [ 5 { 6 "kind": "books#volume", 7 "id": "bhQ-jwEACAAJ", 8 "etag": "BmkCDpQSH+I", 9 "selfLink": "https://www.googleapis.com/books/v1/volumes/bhQ-jwEACAAJ", 10 "volumeInfo": { 11 "title": "図解ワイン一年生", 12 "authors": [ 13 "小久保尊" 14 ], 15 "publishedDate": "2015-12-01", 16 "description": "ワインが10倍楽しくなる!ワインをいつも“勘”で選んでいるあなたへ。下町の人気ソムリエが教える、世界一かんたんなワインの教科書。ワインに関する素朴な疑問をすべて解決します。", 17 "industryIdentifiers": [ 18 { 19 "type": "ISBN_10", 20 "identifier": "4801400205" 21 }, 22 { 23 "type": "ISBN_13", 24 "identifier": "9784801400207" 25 } 26 ], 27 "readingModes": { 28 "text": false, 29 "image": false 30 }, 31 "pageCount": 277, 32 "printType": "BOOK", 33 "maturityRating": "NOT_MATURE", 34 "allowAnonLogging": false, 35 "contentVersion": "preview-1.0.0", 36 "imageLinks": { 37 "smallThumbnail": "http://books.google.com/books/content?id=bhQ-jwEACAAJ&printsec=frontcover&img=1&zoom=5&source=gbs_api", 38 "thumbnail": "http://books.google.com/books/content?id=bhQ-jwEACAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api" 39 }, 40 "language": "ja", 41 "previewLink": "http://books.google.co.jp/books?id=bhQ-jwEACAAJ&dq=isbn:9784801400207&hl=&cd=1&source=gbs_api", 42 "infoLink": "http://books.google.co.jp/books?id=bhQ-jwEACAAJ&dq=isbn:9784801400207&hl=&source=gbs_api", 43 "canonicalVolumeLink": "https://books.google.com/books/about/%E5%9B%B3%E8%A7%A3%E3%83%AF%E3%82%A4%E3%83%B3%E4%B8%80%E5%B9%B4%E7%94%9F.html?hl=&id=bhQ-jwEACAAJ" 44 }, 45 "saleInfo": { 46 "country": "JP", 47 "saleability": "NOT_FOR_SALE", 48 "isEbook": false 49 }, 50 "accessInfo": { 51 "country": "JP", 52 "viewability": "NO_PAGES", 53 "embeddable": false, 54 "publicDomain": false, 55 "textToSpeechPermission": "ALLOWED", 56 "epub": { 57 "isAvailable": false 58 }, 59 "pdf": { 60 "isAvailable": false 61 }, 62 "webReaderLink": "http://play.google.com/books/reader?id=bhQ-jwEACAAJ&hl=&printsec=frontcover&source=gbs_api", 63 "accessViewStatus": "NONE", 64 "quoteSharingAllowed": false 65 }, 66 "searchInfo": { 67 "textSnippet": "ワインが10倍楽しくなる!ワインをいつも“勘”で選んでいるあなたへ。下町の人気ソムリエが教える、世界一かんたんなワインの教科書。ワインに関する素朴な疑問をすべて解決 ..." 68 } 69 } 70 ] 71}
swift
1 // JSONのItem内のデータ構造 2 struct ItemJson: Codable { 3 // 本の名称 4 let title: String? 5 // 著者 6 let authors: String? 7 let smallThumbnail: URL? 8 } 9 10 // JSONのデータ構造 11 struct ResultJson: Codable { 12 // 複数要素 13 let items:[ItemJson]? 14 } 15 16 17 // 第一引数:keyword 検索したいワード 18 func searchBook(keyword : String) { 19 // 本のISBN情報をURLエンコードする 20 guard let keyword_encode = keyword.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else { 21 return 22 } 23 24 // リクエストURLの組み立て 25 guard let req_url = URL(string: "https://www.googleapis.com/books/v1/volumes?q=isbn:(keyword)") else { 26 return 27 } 28 print(req_url) 29 30 // リクエストに必要な情報を生成 31 let req = URLRequest(url: req_url) 32 // データ転送を管理するためのセッションを生成 33 let session = URLSession(configuration: .default, delegate: nil, delegateQueue: OperationQueue.main) 34 // リクエストをタスクとして登録 35 let task = session.dataTask(with: req, completionHandler: { 36 (data , response , error) in 37 // セッションを終了 38 session.finishTasksAndInvalidate() 39 // do try catch エラーハンドリング 40 do { 41 //JSONDecoderのインスタンス取得 42 let decoder = JSONDecoder() 43 // 受け取ったJSONデータをパース(解析)して格納 44 let json = try decoder.decode(ResultJson.self, from: data!) 45 print(json) 46 47 } catch { 48 // エラー処理 49 print("エラー?") 50 print(error) 51 } 52 }) 53 // ダウンロード開始 54 task.resume() 55 }
戻り値が下記のようになってしまいます。
ResultJson(items: Optional([Habit.CameraViewController.ItemJson(title: nil, authors: nil, smallThumbnail: nil)]))
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。