1.はじめに
- 表題のとおりなんですが、忘備録として記述です。
- キャメルケース、スネークケースについては、Google先生にて確認してください。
2.バージョン
- Xcode12
- Swift 5.0
- GitHubなし(そのままコピペで使えるよ)
3.キャメルケースで受信した時
APIで受信したときに、APIフォーマットがキャメルケースであった場合。
簡単に言うと、そのまんま使えた場合。
import Foundation
struct Response: Codable {
/// 名前
let firstName: String
/// 名字
let lastName: String
}
/// 受信データ
var json = """
{
"firstName": "山田",
"lastName": "太郎"
}
"""
let data = json.data(using: .utf8)!
/// デコード処理
let model = try! JSONDecoder().decode(Response.self, from: data)
print(model)
4.JSONDecoder
のパラメータには、スネークケースで受信する方法がある
let jsonDecoder = JSONDecoder()
jsonDecoder.keyDecodingStrategy = .convertFromSnakeCase
上記でエンコードする。
ただ、これだけだと自動的に使えないので、受信する構造体に、CodingKey
を派生させたenum
を切っておく。以下みたいな感じ
struct Response: Codable {
/// 名前 [first_name]
let firstName: String
/// 名字 [last_name]
let lastName: String
private enum CodingKeys: String, CodingKey {
case firstName
case lastName
}
}
5.まとめると
以下にような実装で、自動的に、APIがスネークケースで返信してきても、コード側としてはキャメルケースの構造体で使用可能となる。あーら便利
(知っていれば、大した話しでないのだけれどねぇ)
import Foundation
struct Response: Codable {
/// 名前 [first_name]
let firstName: String
/// 名字 [last_name]
let lastName: String
private enum CodingKeys: String, CodingKey {
case firstName
case lastName
}
}
/// 受信データ
var json = """
{
"first_name": "山田",
"last_name": "太郎"
}
"""
let data = json.data(using: .utf8)!
/// デコード処理
let jsonDecoder = JSONDecoder()
jsonDecoder.keyDecodingStrategy = .convertFromSnakeCase
let model = try! jsonDecoder.decode(Response.self, from: data)
print(model)
おしまい