【Swift】SwiftyJSONの使い方!APIをパース→キャストで便利に

この記事からわかること
- Swiftのライブラリ:SwiftyJSONの使い方
- APIで取得できるJSON形式のデータを変換する方法
- キャスト(型変換)できるデータ型
index
[open]
\ アプリをリリースしました /
APIで取得できるJSON形式とは?
さまざまなサービスがサービス内の情報を外部のサービスから参照できるようにAPIとして提供しています。
※APIとは「Application Programming Interface」の略称でアプリやプログラム、Webサービス同士を繋ぐインターフェースのことを指します。
APIで取得できるのはJSON形式と呼ばれる以下のようなjavascriptのオブジェクトの記法に則った形式になっていることが多いです。
上記のような簡素なネスト(深さ)なら良いですが、APIによっては複雑でより深いものもあるのでSwift内での扱いは大変になります。
SwiftyJSONとは?
SwiftyJSONとはJSON形式のデータをパースしてSwift内で操作しやすい形に変換する機能を提供してくれるSwiftのライブラリの1つです。デフォルトでは組み込まれていないのでCocoa Podsなどのライブラリ管理ツールを使用してプロジェクトに導入する必要があります。
SwiftでJSON形式をSwift内で使用できる辞書型や配列、クラス、構造体に変換するにはJSONSerialization
やJSONDecoder
クラスが使用できますが、より簡単に、短く同じ処理をかけるのがSwiftyJSONです。
インストール方法
プロジェクトに導入するためには今回はCocoa Podsを使用します。(別にそれ以外のライブラリ管理ツールでも良いです)
「PodFile」にpod 'SwiftyJSON'
と記述しpod install
を実行します。
あとは使用するファイルの上部でimport
すれば準備は完了です。
JSONDecoderを使用したAPI取得処理例
まずはざっくりSwiftyJSONを使用せずにSwift内で扱いやすいように構造体に変換する方法を見てみます。今回はQiitaのAPIを使用して記事を取得していきます。まずは記事用の構造体を定義します。プロパティは取得できるJSONデータを読み解きながら同名で定義する必要があり、ネストするほどたくさんのモデルが必要になります。この作業がJSONが大きいほど大変になります。
続いて実際の通信処理&変換部分です。ここはもうスムーズに書けます。
またもう1つのJSONSerialization
クラスの場合はモデルの定義はなく辞書型に変換できますが、中身を取り出す際に以下のような深いネストとキャストの連続になってしまいます。
SwiftyJSONを使用したAPI取得処理例
次にSwiftyJSONを使用したAPI取得処理例を見てみます。
めちゃくちゃスッキリしました。JSONのパース(解析)をしているのはJSON
構造体のイニシャライザを使用している以下の部分です。
これにより掘り進めていくときのキャストが不要になり、json![0]["user"]["name"]
のようにキーなどがわかっていれば一発で記述することができます。
豊富なキャスト
またJSON
構造体には簡単に型変換(キャスト)できるようなプロパティが用意されています。
変換できる型は非常に多くInt
型もInt8 〜 64
まで定義されています。
プロパティ名 | 型 |
---|---|
string | String |
int | Int |
double | Double |
bool | Bool |
array | Array |
arrayValue | Array<JSON> |
etc... | etc... |
AndroidならGSONなどが有名です。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。