withアプリーチSwiftの構造体をJSONデータに変換する方法をまとめていきたいと思います。JSONファイルとは?「JSONファイル」とはJavaScriptのオブジェクト形式の記法に準拠した構造で拡張子に「.json」が用いられるテキストデータファイルのことです。様々なプログラミング言語でも扱いが可能ながらもテキストファイルなので軽量なのが大きなメリットです。Notation(記法)」の略称です。]}おすすめ記事:JSONファイルの構造とは?配列と連想配列の違いを理解して正しい記法を覚えよう!中身は配列と連想配列を組み合わせたような形式になっています。深くネストすることも可能ですが、大枠は連想配列になっているのがJSONファイルの特徴です。Swiftでも利便性の高いJSONファイルを扱うことが可能です。SwiftでJSONファイルを扱うSwiftでJSONファイルを扱う上で注意しなければいけないポイントは以下の通りです。JSONファイルを扱うポイントデータ型エンコードデコードエンコード(encode)とは「符号化」のことで、「一定の規則に準じた形式にデータ変換すること」です。デコード(decode)はその逆で符号化されたデータを元に戻すことをさしています。今回はエンコードについてまとめていきます。おすすめ記事:【Swift】JSONデータをデコードする方法!JSONDecoderクラスの使い方Swiftの構造体をJSONデータに変換する(エンコード)Swiftの構造体をJSONデータに変換するためのポイントEncodableプロトコルJSONEncoderクラスJSONが扱える状態(文字コードUTF-8/Data型)へ変換Encodableプロトコルに準拠した構造体Swiftの構造体からJSONデータに変換するためには対象の構造体がEncodableプロトコルに準拠している必要があります。プロトコルはDecodableプロトコルとEncodableプロトコルを兼ねたタイプエイリアス(別名)であるCodableプロトコルを指定しても問題ありません。hobby:String}おすすめ記事:【Swift】構造体(struct)とは?プロトコルやイニシャライザの使い方これで構造体の定義が完了したのでJSONに変換したい値を格納しておきます。JSONEncoderエンコードするにはSwiftに標準で定義されている、JSONデータにエンコードするためのJSONEncoderクラスを使用します。エンコードする際にポイントになるのはoutputFormattingプロパティとencodeメソッドです。.utf8)!)問題がなければ下記のようにJSON形式となって出力されます。JSONEncoder.outputFormattingプロパティoutputFormattingプロパティはエンコードしたJSONデータのインデントやサイズ、順序などを指定できるインスタンスプロパティです。設定できる値は下記のものをから選びます。未指定の場合はそのまま出力してくれます。{"name":"Ame\/Tsubaki","age":18,"hobby":"web制作"}.prettyPrintedインデントを自動で付与し、読みやすい形で出力してくれるフォーマット値です。"web制作"}.sortedKeysキー値を昇順でソートした状態で出力してくれるフォーマット値です。{"age":18,"hobby":"web制作","name":"Ame\/Tsubaki"}.withoutEscapingSlashes「/(スラッシュ)」が入っている場合にエスケープ文字を付けずに出力するフォーマット値です。{"name":"Ame/Tsubaki","age":18,"hobby":"web制作"}encodeメソッドencodeメソッドはJSONEncoderクラスのジェネリックインスタンスメソッドです。引数に変換したい構造体を渡し、エンコードされたJSONデータが戻り値として帰ってきます。Encodable定義を見るとthrows句があるので異常があった場合に例外が投げられる可能性があります。encodeメソッドの実行にはtry文を使用するのを忘れないように注意してください。ジェネリックと<T>の意味についてはこちらの記事を参考にしてください。おすすめ記事:【Swift】ジェネリクスの意味と使い方!Comparableプロトコルとは?SwiftでJSONとして扱う型式エンコードが完了した戻り値はSwiftでJSONデータとして扱う型に適さない可能性があります。Swift内でJSON形式のデータであることを認識させるために明示的に適切な変換をおこなっておきます。ポイントSwiftでJSONデータを扱うには文字コード:UTF-8のData型にする適切なData型に変換する方法は幾つかありますが今回はStringのイニシャライザーを使って変換していきます。.utf8)!)引数には変換したいデータとエンコード値を指定します。エンコード値(String.Encoding)はASCII文字やUTF-8など様々な設定値が用意されています。String.Encoding)ネストされた構造体をJSONデータにエンコードする構造体の中にさらに構造体が定義されているようなネスト(階層化)されている場合でもエンコードは可能です。"Webエンジニア学習部屋"}構造体からJSONデータに変換するプロパティを指定する定義されている構造体のプロパティの中からJSONデータに変換したくないプロパティがある場合は列挙型(enum)CodingKeysを定義することで変換するプロパティを選択することができます。hobbyプロパティは変換したくない場合は以下のように定義します。}}列挙型(enum)を含んだ構造体を変換する構造体のプロパティに列挙型(enum)を使用している場合は列挙型にもCodableプロトコルへの準拠が必要になります。'Encodable'のようなエラーになります。定義したSwiftオブジェクトのプロパティがBool型でもJSONの値をrue/false以外でへ変換させたい場面もあると思います。詳細はこちらの記事を参考にしてください。おすすめ記事:【Swift】JSONの1や0をBool(真偽値)に変換する方法!decodeIfPresentまだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。ご覧いただきありがとうございました。友達や家族の誕生日を登録しておくと当日に通知が届きお知らせしてくれるiOSアプリです。貸し借り管理アプリお金の貸し借りを管理するためのアプリです。貸借の色が分かれているので識別しやすく、使いやすさを求めてできるだけシンプルなUIにしています。カシホン人に貸すことが多く、誰に貸したか忘れがちな本の貸し借りを記録できるアプリです。