【Swift】Codableを使ったJSONとオブジェクト型の変換

Swift

API等でデータを受け取る際、JSON形式で受け取ることが多いと思いますが、JSONデータのままでは扱いにくいですよね。逆にデータを投げる際にオブジェクト型のデータをJSONに変換したいときもありますよね。
そんなときに、Codableプロトコルを使用するととても簡単に変換できるので、今回はCodableを使ったJSONデータをオブジェクトに変換する方法と、オブジェクトからJSONデータに変換する方法を紹介します。

環境

  • Xcode13.0
  • 動作はシミュレーターのiPhone13 miniで確認

JSON → オブジェクト

まずはCodableに準拠した構造体を用意します。

struct Person: Codable {
    let name: String
    let age: Int
}

変換するデータは以下のようなものとします。

{
	"name": "田中太郎",
	"age": 20
}

あとはこんな感じです。

let decoder: JSONDecoder = JSONDecoder()
guard let person: Person = try? decoder.decode(Person.self, from: jsonData) else {
    fatalError("Failed to decode from JSON.")
}

たったこれだけでJSONからオブジェクトに変換ができます。

オブジェクト → JSON

次にオブジェクトからJSONに変換してみましょう。

上と同じ構造体を使用します。

let person = Person(name: "田中太郎", age: 20)
let encoder = JSONEncoder()
guard let jsonValue = try? encoder.encode(person) else {
    fatalError("Failed to encode to JSON.")
}

はい、オブジェクトからJSONへの変換もこれだけです。

注意点

注意していただきたいのは、上記の方法では、JSONのキー名と構造体のプロパティ名が一致していなければなりません。一致していない場合は以下のように構造体に追記しましょう。

{
	"shimei": "田中太郎",
	"age": 20
}
struct Person: Codable {
    let name: String
    let age: Int

    private enum CodingKeys: String, CodingKey {
        case name = "shimei"
    }
}

コメント