iOS
 Computer >> コンピューター >  >> プログラミング >> iOS

iPhone / iOS(Swift)でJSONオブジェクトを解析する方法を徹底解説

JSONとは?

JSONは「JavaScript Object Notation」の略称で、軽量なデータ交換フォーマットとして広く利用されています。APIや各種Webサービスと連携する際、多くの場合データはJSON形式で返却されるため、それをSwiftなどの扱いやすい形式に変換する必要があります。

JSONSerializationクラスによる解析

iOSのFoundationフレームワークには、JSONをDictionary(辞書)、String、Boolなどのサポートされた型へ変換するためのJSONSerializationクラスが用意されています。

このクラスが提供するjsonObject(with:options:)メソッドは、JSONデータを解析してAny型の結果を返します。データが解析できない場合にはエラーをスローします。

// 例となるJSON:
/*
{
   "age": 42.0,
   "name": {
       "firstName": "tut"
   }
}*/

APIから取得したデータを解析する

続いて、APIコールで受け取ったデータを実際に解析してみましょう。以下のようにJSONSerialization.jsonObject(with:options:)を使用します。

if let data = data, let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] { }

// 上記のコードでは、受信したデータが[String: Any]型の辞書としてjsonオブジェクトに格納されます。解析に失敗した場合はif letブロックを抜けてelse側へ処理が移ります。

// たとえば、jsonの中に「Student」というキーがあり、その値が辞書である場合、次のように取り出せます。

guard let student = json["Student"] as? [String: Any] else { return }

このようにしてJSONを解析し、必要な値を取得できます。さらにモデルクラスやイニシャライザを組み合わせることで、より安全で保守性の高い実装も可能になります。

ローカルJSONファイルを解析してみよう

ここでは、ローカルに保存したJSONファイルを読み込み、解析する例を紹介します。まず、以下の内容で「exercises.json」というファイルを作成してください。

{
   "Warmup": {
       "Exercises": [
           {
               "Name": "Neck Strech",
               "images": [
                   "http:sdf.com",
                   "sdf",
                   "sdf",
                   "sdf"
               ],
               "time": 30
           }
       ]
   }
}

次に、このローカルJSONファイルを読み込んで解析し、結果を出力するコードが以下の通りです。

if let filePath = Bundle.main.path(forResource: "exerciseData", ofType: "json") {
   do {
       let data = try Data(contentsOf: URL(fileURLWithPath: filePath), options: .mappedIfSafe)
       let jsonResult = try JSONSerialization.jsonObject(with: data, options: .mutableLeaves)
       if let exercises = jsonResult as? [String:AnyObject] {
           if let warmups = exercises["Warmup"] as? [String:AnyObject] {
               print(warmups)
           }
       }
   } catch {
       print(error.localizedDescription)
   }
}

このコードを実行すると、以下のような出力結果が得られます。

iPhone / iOS(Swift)でJSONオブジェクトを解析する方法を徹底解説


  1. iPhoneのiOSをダウングレードする方法【ベータ版・正式版それぞれの戻し方】

    iOSのアップデートは非常に魅力的です。iPhoneの機能を向上させる素晴らしい新機能が追加されるだけでなく、ほとんどのマイナーアップデートには、既知のバグや不具合を修正する多数の修正も含まれています。 しかし、iOSのベータ版は話が別です。ベータ版では、重要な機能が動作しなくなったり、アプリが正常に起動できなくなったり、バッテリー関連の問題が発生したりすることがよくあります。まれに、正式リリース版でも同様の問題が起こることがあります。 他のトラブルシューティング手段をすべて試しても解決しない場合(iPhoneのリセットは試しましたか?)、iOSのダウングレードが有効な解決策になる可能

  2. iOS 12のインストール方法|GM版・IPSWファイルを使った2つの手順を解説

    Appleは、待ち望まれていたiOS 12のリリース日を9月17日と発表しました。しかし、正式リリースまで待ちたくない方には、今すぐiOS 12のゴールドマスター(GM)版をインストールする方法があります。そのためには「Apple Beta Software Program」に参加し、お使いのデバイスを登録する必要があります。 正式版のiOS 12は約1週間後に一般公開される予定で、「スクリーンタイム」「Memoji」「Siriショートカット」、改善された通知機能など、多数の新機能が利用できるようになります。 ポイント:iOS 12は、古い機種から新しい機種まで、あらゆるiPhoneの応答速度