今後も使う機会がありそうなので、備忘録としてまとめ。
SnakeCase の JSON データを CamelCase に変換する方法についてです。
やってみると、思いのほか簡単でした!
参考にさせていただいた記事がこちら。
CodableでCamelCase⇄SnakeCaseの変換を行う(keyDecodingStrategy/keyEncodingStrategy) – Qiita
https://qiita.com/iganin/items/6c6a588dd73731097698
今回読み込む JSON のサンプルデータがこちら。
{
"shop_id": "1",
"shop_name": "◯◯◯◯ ××店",
"address": "静岡県浜松市中区富塚町1933−1",
"tel": "123-456-7890",
}
名前の部分が SnakeCase になっています。
取得するデータの構造を Codable を使って定義しますが、こちらは CamelCase を使用しています。
struct Shop: Codable {
let shopId: String
let shopName: String
let address: String
let tel: String
}
このままでは、JSON データを変換することができません。
そのため、JsonDecoder の keyDecodingStrategy を使用して、SnakeCase を CamelCase に変換します。
サンプルコードは下記の通りです。
let shopJson = [JSONのサンプルデータ].data(using: .utf8)
let jsonDecoder = JsonDecoder()
jsonDecoder.keyDecodingStrategy = .convertFromSnakeCase
do {
let shop = try jsonDecoder.decode(Shop.self, from: shopJson)
print(shop)
} catch {
print(error.localizedDescription)
}
ポイントは 4行目の jsonDecoder.keyDecodingStrategy = .convertFromSnakeCase です。
これを追加すると、デコードの際に SnakeCase のデータを CamelCase に変換してくれます。
追加するのは以上です!
コードに問題がなければ、shop.shopName や shop.address のように指定して、店名や住所などを取得することができます。
なお、参考サイトによると、上記の方法以外にも、Codable でデータの構造を指定する時に、CodingKey を定義して SnakeCase → CamelCase に変換することもできるみたいですが、項目数が増えるといちいち書くのは大変なので、JsonDecoder で変換したほうが楽だと思います。
以上、Swift で SnakeCase の JSON データを CamelCase に変換する方法についてでした。
ご参考になれば幸いです。