質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1616閲覧

Himotokiを使った楽天APIのデコードができない

YamamuraRyoga

総合スコア18

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/11/06 08:00

楽天APIを使って開発してるのですが、
下に示したようなJSONがレスポンスとして返ってくるのですが、Hitmotokiを使ったデコード方法がわかりません。

Itemsの下に配列がありその下にハッシュがある場合のデコード方法がわからずエラーになります。
わかる方いれば教えていただきたいです。。。

swift

1//APIKitのリクエスト 2func response(from object: Any, urlResponse: HTTPURLResponse) throws -> RakutenItem { 3 return try decodeValue(object, rootKeyPath: "Items") 4 }

Swift

1 public static func decode(_ e: Extractor) throws -> RakutenItem { 2 3 return try RakutenItem( 4 title: e <| ["Item", "title"], 5 author: e <| ["Item", "author"], 6 publisher: e <| ["Item", "publisherName"], 7 isbn: e <| ["Item", "isbn"] 8 ) 9 }

json

1{ 2 "count": 3, 3 "page": 1, 4 "first": 1, 5 "last": 3, 6 "hits": 3, 7 "carrier": 0, 8 "pageCount": 1, 9 "Items": [ 10 { 11 "Item": { 12 "title": "西荻窪ランスルー 3", 13 "titleKana": "ニシオギクボランスルーサン", 14 "subTitle": "", 15 "subTitleKana": "", 16 "seriesName": "ゼノンコミックス", 17 "seriesNameKana": "ゼノンコミックス", 18 "contents": "", 19 "author": "ゆき林檎", 20 "authorKana": "ユキリンゴ", 21 "publisherName": "ノース・スターズ・ピクチャーズ", 22 "size": "コミック", 23 "isbn": "9784199804328", 24 "itemCaption": "", 25 "salesDate": "2017年07月20日", 26 "itemPrice": 626, 27 "listPrice": 0, 28 "discountRate": 0, 29 "discountPrice": 0, 30 "itemUrl": "https://books.rakuten.co.jp/rb/15005961/", 31 "affiliateUrl": "", 32 "smallImageUrl": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/4328/9784199804328.jpg?_ex=64x64", 33 "mediumImageUrl": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/4328/9784199804328.jpg?_ex=120x120", 34 "largeImageUrl": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/4328/9784199804328.jpg?_ex=200x200", 35 "chirayomiUrl": "", 36 "availability": "1", 37 "postageFlag": 0, 38 "limitedFlag": 0, 39 "reviewCount": 0, 40 "reviewAverage": "0.0", 41 "booksGenreId": "001001003052" 42 } 43 }, 44 { 45 "Item": { 46 "title": "西荻窪ランスルー 1", 47 "titleKana": "ニシオギクボランスルーイチ", 48 "subTitle": "", 49 "subTitleKana": "", 50 "seriesName": "ゼノンコミックス", 51 "seriesNameKana": "ゼノン コミックス", 52 "contents": "", 53 "author": "ゆき林檎", 54 "authorKana": "ユキリンゴ", 55 "publisherName": "ノース・スターズ・ピクチャーズ", 56 "size": "コミック", 57 "isbn": "9784199803529", 58 "itemCaption": "", 59 "salesDate": "2016年06月20日", 60 "itemPrice": 626, 61 "listPrice": 0, 62 "discountRate": 0, 63 "discountPrice": 0, 64 "itemUrl": "https://books.rakuten.co.jp/rb/14161215/", 65 "affiliateUrl": "", 66 "smallImageUrl": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/3529/9784199803529.jpg?_ex=64x64", 67 "mediumImageUrl": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/3529/9784199803529.jpg?_ex=120x120", 68 "largeImageUrl": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/3529/9784199803529.jpg?_ex=200x200", 69 "chirayomiUrl": "", 70 "availability": "1", 71 "postageFlag": 0, 72 "limitedFlag": 0, 73 "reviewCount": 0, 74 "reviewAverage": "0.0", 75 "booksGenreId": "001001003052" 76 } 77 } 78 ], 79 "GenreInformation": [] 80}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

swift

1struct RakutenItem : Himotoki.Decodable { 2 let title: String 3 let titleKana: String 4 .... 5 6 public static func decode(_ e: Extractor) throws -> RakutenItem { 7 return try RakutenItem( 8 title: e <| ["title"], 9 titleKana: e <| ["titleKana"], 10 .... 11 } 12 } 13}

として

swift

1func response(from object: Any, urlResponse: HTTPURLResponse) throws -> [RakutenItem] { 2 return try decodeArray(object, rootKeyPath: "Items") 3 }

とすればよさそうですね。

投稿2017/11/07 03:15

MasakiHori

総合スコア3384

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YamamuraRyoga

2017/11/07 06:36

自己解決できてましたが、回答いただきましたのでベストアンサーにさせていただきますm(_ _)m decodeないのtitle: e <| ["title"]部分がtitle: e <| ["Item", "title"]じゃないと動きませんので一応コメントで残しておきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問