WebAPIから取得したJSONのキーはスネークケースにになっていることが多いです。
一方で、Swiftの変数等の命名はキャメルケースで行います。その場合、Decodable
に準拠した構造体でもうまく読み込めません。
既存の方法ではCodingKey
を利用しますが、いちいち定義するのは面倒です。
今回はCodingKey
を利用せずにKeyがスネークケースのJSONをデコードする方法を紹介します。
.keyDecodingStrategyを設定する
JSONをデコードして構造体に変換する際、JSONDecorder
クラスを利用します。
その際、.keyDecodingStrategy
に.convertFromSnakeCase
を設定することで、キーをスネークケースでパースすることができます。
import UIKit struct User: Decodable { let mailAddr: String } let jsonStr = """ {"mail_addr":"ohitori@example.com"} """ let data = jsonStr.data(using: .utf8)! let decorder = JSONDecoder() decorder.keyDecodingStrategy = .convertFromSnakeCase // キーをスネークケースでパースする設定 do { let user = try decorder.decode(User.self, from: data) print(user.mailAddr) } catch { print("Error: \(error)") }
上記のコードをXcodeのSwift playgroundで実行すると、不具合なくohitori@example.com
が表示されます。