Soumettre la recherche
Mettre en ligne
ObjectMapperでJSONマッピング
•
18 j'aime
•
6,791 vues
Syo Ikeda
Suivre
関西モバイルアプリ研究会 #1
Lire moins
Lire la suite
Ingénierie
Signaler
Partager
Signaler
Partager
1 sur 21
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
Himotoki: A type-safe JSON decoding library #関モバ
Himotoki: A type-safe JSON decoding library #関モバ
Syo Ikeda
Dynamic frameworks tips
Dynamic frameworks tips
Syo Ikeda
SwiftでAndroidアプリ書けるってよ
SwiftでAndroidアプリ書けるってよ
Syo Ikeda
iOSでのFramework導入のおさらい #関モバ
iOSでのFramework導入のおさらい #関モバ
Syo Ikeda
Xcode and iTC submission topics
Xcode and iTC submission topics
Syo Ikeda
Carthageについて知りたいn個のこと
Carthageについて知りたいn個のこと
Syo Ikeda
Swift 1.2からSwift 2への移行 #cocoa_kansai
Swift 1.2からSwift 2への移行 #cocoa_kansai
Syo Ikeda
iOSでライブラリを提供する際に気をつけたいこと
iOSでライブラリを提供する際に気をつけたいこと
asakahara
Recommandé
Himotoki: A type-safe JSON decoding library #関モバ
Himotoki: A type-safe JSON decoding library #関モバ
Syo Ikeda
Dynamic frameworks tips
Dynamic frameworks tips
Syo Ikeda
SwiftでAndroidアプリ書けるってよ
SwiftでAndroidアプリ書けるってよ
Syo Ikeda
iOSでのFramework導入のおさらい #関モバ
iOSでのFramework導入のおさらい #関モバ
Syo Ikeda
Xcode and iTC submission topics
Xcode and iTC submission topics
Syo Ikeda
Carthageについて知りたいn個のこと
Carthageについて知りたいn個のこと
Syo Ikeda
Swift 1.2からSwift 2への移行 #cocoa_kansai
Swift 1.2からSwift 2への移行 #cocoa_kansai
Syo Ikeda
iOSでライブラリを提供する際に気をつけたいこと
iOSでライブラリを提供する際に気をつけたいこと
asakahara
Embedded framework and so on
Embedded framework and so on
toyship
Apple watch対応アプリのポイントや基本実装・連携tips
Apple watch対応アプリのポイントや基本実装・連携tips
Fumiya Sakai
デザインにもこだわったUiの事始め3
デザインにもこだわったUiの事始め3
Fumiya Sakai
React way at_eight
React way at_eight
Hideharu Okuma
高専カンファレンス in 岐阜 基調講演2 @gabu
高専カンファレンス in 岐阜 基調講演2 @gabu
Shoya Tsukada
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
Shuji Watanabe
Swiftビギナーズ勉強会 第1回 @Co-Edo
Swiftビギナーズ勉強会 第1回 @Co-Edo
Megumi Otani(Czenhe)
SwiftとReactNativeで似たようなUIを作った際の記録
SwiftとReactNativeで似たようなUIを作った際の記録
Fumiya Sakai
Refrection of kawasaki.rb
Refrection of kawasaki.rb
Aki Ariga
NativeBaseをはじめとするUIに関する ライブラリを使ったサンプルを作ってみた
NativeBaseをはじめとするUIに関する ライブラリを使ったサンプルを作ってみた
Fumiya Sakai
The First React on Rails
The First React on Rails
Kohei Ito
Perlを書くときに意識していること
Perlを書くときに意識していること
良太 増子
[Excel]basic training03(3/5)
[Excel]basic training03(3/5)
Hiroyuki Ishikawa
Ruby and I at 神奈川Ruby会議01
Ruby and I at 神奈川Ruby会議01
Yutaka Tachibana
[Excel]basic training05(5/5)
[Excel]basic training05(5/5)
Hiroyuki Ishikawa
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング
leverages_event
Container view活用術とポイントになる部分
Container view活用術とポイントになる部分
Fumiya Sakai
Swift事情2014夏 ~ Swift入門 beta6対応
Swift事情2014夏 ~ Swift入門 beta6対応
Tomoki Hasegawa
Parse.comを使ってみた感想とまとめ
Parse.comを使ってみた感想とまとめ
Fumiya Sakai
Cmujp21_node-webkit
Cmujp21_node-webkit
Sugawara Ryousuke
Auto Layout の小技
Auto Layout の小技
Yuichi Fujishige
SwiftLint
SwiftLint
Syo Ikeda
Contenu connexe
Tendances
Embedded framework and so on
Embedded framework and so on
toyship
Apple watch対応アプリのポイントや基本実装・連携tips
Apple watch対応アプリのポイントや基本実装・連携tips
Fumiya Sakai
デザインにもこだわったUiの事始め3
デザインにもこだわったUiの事始め3
Fumiya Sakai
React way at_eight
React way at_eight
Hideharu Okuma
高専カンファレンス in 岐阜 基調講演2 @gabu
高専カンファレンス in 岐阜 基調講演2 @gabu
Shoya Tsukada
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
Shuji Watanabe
Swiftビギナーズ勉強会 第1回 @Co-Edo
Swiftビギナーズ勉強会 第1回 @Co-Edo
Megumi Otani(Czenhe)
SwiftとReactNativeで似たようなUIを作った際の記録
SwiftとReactNativeで似たようなUIを作った際の記録
Fumiya Sakai
Refrection of kawasaki.rb
Refrection of kawasaki.rb
Aki Ariga
NativeBaseをはじめとするUIに関する ライブラリを使ったサンプルを作ってみた
NativeBaseをはじめとするUIに関する ライブラリを使ったサンプルを作ってみた
Fumiya Sakai
The First React on Rails
The First React on Rails
Kohei Ito
Perlを書くときに意識していること
Perlを書くときに意識していること
良太 増子
[Excel]basic training03(3/5)
[Excel]basic training03(3/5)
Hiroyuki Ishikawa
Ruby and I at 神奈川Ruby会議01
Ruby and I at 神奈川Ruby会議01
Yutaka Tachibana
[Excel]basic training05(5/5)
[Excel]basic training05(5/5)
Hiroyuki Ishikawa
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング
leverages_event
Container view活用術とポイントになる部分
Container view活用術とポイントになる部分
Fumiya Sakai
Swift事情2014夏 ~ Swift入門 beta6対応
Swift事情2014夏 ~ Swift入門 beta6対応
Tomoki Hasegawa
Parse.comを使ってみた感想とまとめ
Parse.comを使ってみた感想とまとめ
Fumiya Sakai
Cmujp21_node-webkit
Cmujp21_node-webkit
Sugawara Ryousuke
Tendances
(20)
Embedded framework and so on
Embedded framework and so on
Apple watch対応アプリのポイントや基本実装・連携tips
Apple watch対応アプリのポイントや基本実装・連携tips
デザインにもこだわったUiの事始め3
デザインにもこだわったUiの事始め3
React way at_eight
React way at_eight
高専カンファレンス in 岐阜 基調講演2 @gabu
高専カンファレンス in 岐阜 基調講演2 @gabu
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
Swiftビギナーズ勉強会 第1回 @Co-Edo
Swiftビギナーズ勉強会 第1回 @Co-Edo
SwiftとReactNativeで似たようなUIを作った際の記録
SwiftとReactNativeで似たようなUIを作った際の記録
Refrection of kawasaki.rb
Refrection of kawasaki.rb
NativeBaseをはじめとするUIに関する ライブラリを使ったサンプルを作ってみた
NativeBaseをはじめとするUIに関する ライブラリを使ったサンプルを作ってみた
The First React on Rails
The First React on Rails
Perlを書くときに意識していること
Perlを書くときに意識していること
[Excel]basic training03(3/5)
[Excel]basic training03(3/5)
Ruby and I at 神奈川Ruby会議01
Ruby and I at 神奈川Ruby会議01
[Excel]basic training05(5/5)
[Excel]basic training05(5/5)
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング
Container view活用術とポイントになる部分
Container view活用術とポイントになる部分
Swift事情2014夏 ~ Swift入門 beta6対応
Swift事情2014夏 ~ Swift入門 beta6対応
Parse.comを使ってみた感想とまとめ
Parse.comを使ってみた感想とまとめ
Cmujp21_node-webkit
Cmujp21_node-webkit
En vedette
Auto Layout の小技
Auto Layout の小技
Yuichi Fujishige
SwiftLint
SwiftLint
Syo Ikeda
var RAC3 = ReactiveCocoa + Swift
var RAC3 = ReactiveCocoa + Swift
Syo Ikeda
Audio QueueでSin波再生
Audio QueueでSin波再生
Yuichi Fujishige
CAKeyframeAnimation
CAKeyframeAnimation
Yuichi Fujishige
iOS 6 のAuto Rotation
iOS 6 のAuto Rotation
Yuichi Fujishige
iOSのFileProtection
iOSのFileProtection
Yuichi Fujishige
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
Syo Ikeda
Wearable realm
Wearable realm
Ryutaro Miyashita
How to handle bitcode
How to handle bitcode
Syo Ikeda
1画面から始めるStoryboard
1画面から始めるStoryboard
Yuichi Fujishige
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
Hiroyuki Ohnaka
Apache Drill で JSON 形式の オープンデータを分析してみる - db tech showcase Tokyo 2015 2015/06/11
Apache Drill で JSON 形式の オープンデータを分析してみる - db tech showcase Tokyo 2015 2015/06/11
MapR Technologies Japan
My client wanted their apps synced, and I made it with Go
My client wanted their apps synced, and I made it with Go
Toru Furukawa
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
Yahoo!デベロッパーネットワーク
ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術
ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術
Yahoo!デベロッパーネットワーク
Yahoo!ブラウザーアプリのプロダクトマネージャーが考えていること
Yahoo!ブラウザーアプリのプロダクトマネージャーが考えていること
Yahoo!デベロッパーネットワーク
Protocol-Oriented MVVM (extended edition)
Protocol-Oriented MVVM (extended edition)
Natasha Murashev
Coding in the context era
Coding in the context era
lestrrat
データテクノロジースペシャル:Yahoo! JAPANにおけるメタデータ管理の試み
データテクノロジースペシャル:Yahoo! JAPANにおけるメタデータ管理の試み
Yahoo!デベロッパーネットワーク
En vedette
(20)
Auto Layout の小技
Auto Layout の小技
SwiftLint
SwiftLint
var RAC3 = ReactiveCocoa + Swift
var RAC3 = ReactiveCocoa + Swift
Audio QueueでSin波再生
Audio QueueでSin波再生
CAKeyframeAnimation
CAKeyframeAnimation
iOS 6 のAuto Rotation
iOS 6 のAuto Rotation
iOSのFileProtection
iOSのFileProtection
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
Wearable realm
Wearable realm
How to handle bitcode
How to handle bitcode
1画面から始めるStoryboard
1画面から始めるStoryboard
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
Apache Drill で JSON 形式の オープンデータを分析してみる - db tech showcase Tokyo 2015 2015/06/11
Apache Drill で JSON 形式の オープンデータを分析してみる - db tech showcase Tokyo 2015 2015/06/11
My client wanted their apps synced, and I made it with Go
My client wanted their apps synced, and I made it with Go
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術
ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術
Yahoo!ブラウザーアプリのプロダクトマネージャーが考えていること
Yahoo!ブラウザーアプリのプロダクトマネージャーが考えていること
Protocol-Oriented MVVM (extended edition)
Protocol-Oriented MVVM (extended edition)
Coding in the context era
Coding in the context era
データテクノロジースペシャル:Yahoo! JAPANにおけるメタデータ管理の試み
データテクノロジースペシャル:Yahoo! JAPANにおけるメタデータ管理の試み
Similaire à ObjectMapperでJSONマッピング
javascript を Xcode でテスト
javascript を Xcode でテスト
Yoichiro Sakurai
Svgアニメーションを実装してみよう 20150207
Svgアニメーションを実装してみよう 20150207
Kanako Kobayashi
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法
Tomoki Hasegawa
LODEO開発ストーリー
LODEO開発ストーリー
Tomohiro Shinden
JavaScript(AngularJS・React.js)で作る iOS・Androidアプリハンズオン
JavaScript(AngularJS・React.js)で作る iOS・Androidアプリハンズオン
Kazuhiro Yoshimoto
Leap Motion を用いた数学教材開発の例
Leap Motion を用いた数学教材開発の例
Yukinori KITADAI
Swiftビギナーズ倶楽部 vol.2
Swiftビギナーズ倶楽部 vol.2
Kanako Kobayashi
とあるサイボウズのAndroidエンジニアのお仕事
とあるサイボウズのAndroidエンジニアのお仕事
Cybozu, Inc.
XcodeのTargetについてのTIPS
XcodeのTargetについてのTIPS
Yoichiro Sakurai
Swiftのプロパティオブザーバを使い倒す
Swiftのプロパティオブザーバを使い倒す
Tomoki Hasegawa
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
Kohei Taniguchi
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
Yusuke Hirao
Meteor勉強会発表資料「MeteorでiOSアプリを作ろう!」
Meteor勉強会発表資料「MeteorでiOSアプリを作ろう!」
Nobutaka OSHIRO
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ
陽平 山口
iOSでMVVM入門
iOSでMVVM入門
ishikawa akira
OpenCV on mobile
OpenCV on mobile
Daisuke Yamashita
iPhoneアプリを Javaで書くよ?
iPhoneアプリを Javaで書くよ?
Toshio Ehara
React Native + Expoでアプリを開発してみた話
React Native + Expoでアプリを開発してみた話
GIG inc.
スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向
Tsutomu Ogasawara
Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014
Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014
Shuji Watanabe
Similaire à ObjectMapperでJSONマッピング
(20)
javascript を Xcode でテスト
javascript を Xcode でテスト
Svgアニメーションを実装してみよう 20150207
Svgアニメーションを実装してみよう 20150207
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法
LODEO開発ストーリー
LODEO開発ストーリー
JavaScript(AngularJS・React.js)で作る iOS・Androidアプリハンズオン
JavaScript(AngularJS・React.js)で作る iOS・Androidアプリハンズオン
Leap Motion を用いた数学教材開発の例
Leap Motion を用いた数学教材開発の例
Swiftビギナーズ倶楽部 vol.2
Swiftビギナーズ倶楽部 vol.2
とあるサイボウズのAndroidエンジニアのお仕事
とあるサイボウズのAndroidエンジニアのお仕事
XcodeのTargetについてのTIPS
XcodeのTargetについてのTIPS
Swiftのプロパティオブザーバを使い倒す
Swiftのプロパティオブザーバを使い倒す
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
Meteor勉強会発表資料「MeteorでiOSアプリを作ろう!」
Meteor勉強会発表資料「MeteorでiOSアプリを作ろう!」
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ
iOSでMVVM入門
iOSでMVVM入門
OpenCV on mobile
OpenCV on mobile
iPhoneアプリを Javaで書くよ?
iPhoneアプリを Javaで書くよ?
React Native + Expoでアプリを開発してみた話
React Native + Expoでアプリを開発してみた話
スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向
Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014
Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014
ObjectMapperでJSONマッピング
1.
ObjectMapperでJSONマッピング @ikesyo 関西モバイルアプリ研究会!2015&04&17!Fri!#関モバ
2.
@ikesyo いけしょー/池田翔 京都でフリーランスのiOSエンジニア (時々Android)しています 現在はフリュー㈱のモバイル開発の チームにジョイン中。 Swi$もReac)veCocoaも使ってます。
3.
4.
Reac%veCocoaのコミッター(Contributor)やってます
5.
ところで
6.
Swi$でJSON(<=>(オブジェクトの マッピングってどうしてますか?
7.
Objec&ve(C時代の定番*=>*Mantle
8.
Mantle'in'Swi+ • Objec've)CのランタイムAPI • dynamic
var • 型安全ではない • struct.や.enum.が使えない
9.
Swi$ネイティブなJSONマッパーを
10.
ObjectMapper
11.
ObjectMapper • h#ps://github.com/Hearst5DD/ObjectMapper • JSONのシリアライズ・デシリアライズ両方に対応 •
Argo>(h#ps://github.com/thoughtbot/Argo)>はデシリアライズ だけの方向性
12.
ObjectMapper • プロトコルベースのAPI • 継承の必要なし •
class%も%struct%も使える。 • rawValue%を持つ%enum%のプロパティも持てる
13.
Mappable public protocol Mappable
{ init?(_ map: Map) mutating func mapping(map: Map) } mutating!によって!struct!でも使えます。
14.
サンプルコード class User: Mappable
{ var username: String? var age: Int? var array: [AnyObject]? var group: Gruop? // 別の`Mappable`な型 required init?(_ map: Map) { mapping(map) } func mapping(map: Map) { username <- map["username"] age <- map["age"] array <- map["array"] group <- map["group"] } } class Group: Mappable { ... }
15.
サンプルコード let JSON: [String:
AnyObject] = [ "username": "ikesyo", "age": 28, "array": [ 1, 2.0, "hoge", true ], "group": [ ... ] ] let mapper = Mapper<User>() let user: User? = mapper.map(JSON) let JSONFromUser: [String: AnyObject] = mapper.toJSON(user!)
16.
サンプルコード let mapper =
Mapper<User>() let usersJSON: [[String: AnyObject]] = ... // ルート要素が配列のJSON let users: [User] = mapper.mapArray(usersJSON) let usersJSONDict: [String: [String: AnyObject]] = ... let usersDict: [String: User] = mapper.mapDictionary(usersJSONDict)
17.
Transform class WithTransform: Mappable
{ var URL: NSURL? var date: NSDate? var intFromString: Int? required init?(_ map: Map) { mapping(map) } func mapping(map: Map) { URL <- (map["url"], URLTransform()) date <- (map["date"], ISO8601DateTransform()) intFromString <- (map["int_from_string"], TransformOf<Int, String>( fromJSON: { (JSONValue: String?) -> Int? in JSONValue?.toInt() }, toJSON: { (value: Int?) -> String? in value.map { String($0) } })) } }
18.
こんなやつも使えます。 struct Immutable: Mappable
{ let prop1: String let prop2: Bool let prop3: Int init?(_ map: Map) { prop1 = map["prop1"].valueOrFail() // nilの場合は`T`型のダミー値をセット prop2 = map["prop2"].valueOrFail() prop3 = map["prop3"].valueOr(Int.min) // デフォルト値 // ダミー値がセットされていれば初期化失敗 if !map.isValid { return nil } } }
19.
こんなやつも使えます。 struct Immutable: Mappable
{ ... mutating func mapping(map: Map) { switch map.mappingType { case .FromJSON: if let x = Immutable(map) { self = x } case .ToJSON: var prop1 = self.prop1 var prop2 = self.prop2 var prop3 = self.prop3 prop1 <- map["prop1"] prop2 <- map["prop2"] prop3 <- map["prop3"] } } }
20.
Collaboratorではないですが、色々対応しています。
21.
ありがとうございました!
Télécharger maintenant