iOS

[Swift4]ライブラリをやめてCodableでJSONを取り扱う

投稿日:

はじめに

こんにちは、nukkyです。
私はSwiftでJSONを取り扱う際に、ObjectMapperを使用していたのですが、Swift4から追加されたCodableが便利そうなのでこちらを使用したいと思い備忘録がてら書いていこうと思います。

Codableとは

CodableはSwiftが提供している構造体やクラスなどをJSONに書き出す、読み込むためのプロトコル。(厳密に言うと、JSONだけではなく、他のフォーマットにも使えます) CodableはEncodable(書き出し用)とDecodable(読み込み用)の二つのプロトコルで構成されています。
Codable – Swift Standard Library | Apple Developer Documentation

Codable使いたい理由

いままで、JSONを取り扱おうと思ったらJSONをパースして、Dictionaryのキーを指定してデータクラスに代入(マッピング)するような流れを実装していたと思うのですが、これだとメンテナンス性も悪いうえコード量もそこそこになります、ライブラリを使用していても結局パース後のデータ構造への代入処理を記載したりマッピングは必須だったと思います。
ですがCodableであれば基本的にマッピングは不要になりコードもすっきりかけます!

実装

とりあえずJSONを読み込む

まずCodableで単純なJSONを読み込んで見たいと思います。
読み込むJSONは以下を用意します。

データを入れる構造体を作成します。

JSONデータをデコードして構造体に変換します。

これだけです。printのログを見てもらえばわかりますがマッピング処理を一切書かずに済んでいます。

ObjectMapperの場合

比較用にObjectMapperの場合、同じJSONで処理内容は以下になります。
JSONは同じものを使用するとして構造体を作成します。

JSONデータをデコードして構造体に変換します。

マッピングをしなくてはならないため構造体の処理に明確な差が出てしまいますね。
GitHub – Hearst-DD/ObjectMapper

ネスト配列に対応してみよう

JSONデータがネストしている場合でも大丈夫です、Codableならネストも簡単です。
まずはJSONを用意します。

そうしたら「photos」が配列になっているので以下のようなデータ構造体を用意します。

JSONデータをデコードして構造体に変換します。

JSONのキーがスネークケースの場合(Swift4.0)

Swiftの変数はキャメルケースですが、JSONのキーはスネークケースという場合も結構あります、その際はCodingKeysという機能で対応することが可能です。
JSONのキーはスネークケースのJSONを用意します。

データを入れる構造体にCodingKeysを追加し作成します。

JSONのキーがスネークケースの場合(Swift4.1)

結局マッピングみたいなことが必要なのかと思っていましたがSwift4.1からEncoderの「keyEncodingStrategy」やDecoderの「keyDecodingStrategy」を設定することで、キャメルケースのプロパティ名からスネークケースのキーが自動作成できるようになりました。

さいごに

Codableオススメですね。個人的には今までライブラリで行なっていたJSONの取り扱いは網羅できて、かつコード量も減るといいことづくめだと思います。Swift4以降で追加されれた機能など深掘りしていなかったのであらためていろいろチェックしていきます。これからiOS12/Xcode10も出ますしどんどん新機能を試してブログにしていきますね。

RE:ENGINESブログ「iOS記事」まとめページはこちらから

参考

blog-page_footer_336




blog-page_footer_336




-iOS
-

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

no image

iOSでFirestoreを使ってみた

1 はじめに2 Cloud Firestoreとは3 仕組み3.1 ドキュメントとは3.2 コレクションとは3.3 サブコレクションとは4 データの保存4.1 新規保存4.2 追加4.3 サブコレクシ ...

【SwiftUI】ドラッグ&ドロップでアプリ間の文字列の共有

1 はじめに2 ドラッグ&ドロップの実装3 ドラッグ側の実装4 ドロップ側の実装5 さいごに6 おすすめ書籍 はじめに こんにちはsuzukiです。今回はドラッグ&ドロップを利用し ...

swift

[Swift]ObjectMapperで簡単にJSONを読み込む

1 はじめに2 準備3 実装3.1 基本的な使い方3.2 ネスト配列に対応してみよう4 さいごに はじめに こんにちは、onukiです。 私はSwiftでJSONを取り扱う際に、 ObjectMapp ...

swift

SwiftでS3への画像アップロード

1 はじめに2 AWS上での事前準備3 CocoaPodsでAWS SDKをインストールをする4 認証の設定をする5 UIImageを保存して、URLを取得する6 S3へアップロードする7 さいごに ...

no image

iOSでFirestoreを使ってみた その2

1 はじめに2 リスナーのアタッチ2.1 ドキュメントのリッスン2.2 複数ドキュメントのリッスン3 ドキュメントの変更タイプの取得4 リスナーのデタッチ5 さいごに6 おすすめ書籍 はじめに 以前、 ...

フォロー

blog-page_side_responsive

2018年9月
 1
2345678
9101112131415
16171819202122
23242526272829
30  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。