【Swift】JSONをデコードする方法

この記事では以下の方法をご紹介します。

  1. ネットからjsonを取得する
  2. 取得したjsonをデコードして構造体に格納する

以下のバージョンで動作確認をしています。

  • Swift 5.2
  • iOS13.4

JSONを取得する

NEWS APIと言うサイトがあります。

https://newsapi.org/

ニュース記事をjson形式で配信しているサイトです。

上記のサイトに登録するとAPIキーがもらえます。

APIキーを指定してAPIを叩くとjsonが表示されますが、見にくいので以下のサイトでフォーマットしましょう。

https://jsonformatter.curiousconcept.com/

うまくいくと以下のようなレスポンスが返ってくるはずです。

「”key”:”value”」の形でデータが羅列されています。

キーの名前は後で使うので覚えておきます。

Swiftでコードを書く

次にSwiftのコードで上記のデータを取得して格納できるようにします。

まずはデータを格納するための構造体を用意します。

Codableプロトコルを指定して、jsonの項目名と構造体の変数名を同じ名前にすると、jsonを変換したときに一括して変数にデータを格納することができます。

構造体名は適当で良いですが、構造体内の変数名は適当ではダメでjsonのキーの名前と一致していないといけません。

1つの記事の「title」「description」「url」をArticleクラスとして作っています。

記事は1つだけではないので、ResultJsonクラスの中にArticleの配列を作っています。

「articles」と言う変数名もjsonのキーと一致していることに注意してください。

それではデータを取得して格納するまでのコードを見ていきましょう。

大まかなコードの流れとしては以下の通り。

  1. 文字列をURLに変換
  2. URLをURLRequestに変換
  3. URLSessionでセッションを作って、dataTaskでURLにアクセスする
  4. URLにアクセスが完了すると、completionHandlerの中身が実行される。(クロージャ)
  5. セッションを終了しjsonをデコードして構造体に格納する
  6. デコードに成功すれば内容を表示、失敗したらエラーであることを表示する

実際の処理はtask.resumeで開始されます。

以上です。