今後も使う機会がありそうなので、備忘録としてまとめ。
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 に変換する方法についてでした。
ご参考になれば幸いです。