【Swift】SnakeCaseのJSONデータをCamelCaseに変換する

今後も使う機会がありそうなので、備忘録としてまとめ。
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 データを変換することができません。

そのため、JsonDecoderkeyDecodingStrategy を使用して、SnakeCaseCamelCase に変換します。
サンプルコードは下記の通りです。

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.shopNameshop.address のように指定して、店名や住所などを取得することができます。

なお、参考サイトによると、上記の方法以外にも、Codable でデータの構造を指定する時に、CodingKey を定義して SnakeCase → CamelCase に変換することもできるみたいですが、項目数が増えるといちいち書くのは大変なので、JsonDecoder で変換したほうが楽だと思います。

 

以上、Swift で SnakeCase の JSON データを CamelCase に変換する方法についてでした。
ご参考になれば幸いです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG