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"
}
}
コメント