1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Swift】CodingKeyを使わず、JSONのsnake_caseをcamelCaseに変換する方法

Posted at

JSONのデータをSwiftで変換する際にCodingKeyを使用する方法を学んだのですが、調べているとCodingKeyを使用しない方法もあったのでメモ

例として、QiitaのAPIを取得しています。

CodingKeyを使用する場合

API用の構造体の中にenumを定義する必要があります。

struct Qiita: Codable {
    let title: String
    let createdAt: String
    let user: User
    
    enum CodingKeys: String, CodingKey {
       case title = "title"
       case createdAt = "created_at"
       case user = "user"
    }
}

struct User: Codable {
    let name: String
    
    enum CodingKeys: String, CodingKey {
        case name = "name"
    }
}

CodingKeyを使用しない場合

構造体内でenumを宣言してcamelCaseに変更する代わりに、API取得時に.keyDecodingStrategy.convertFromSnakeCaseを代入して変換します。

構造体

struct Qiita: Codable {
    let title: String
    let createdAt: String
    let user: User
}

struct User: Codable {
    let name: String
}

enumが無くなりスリムになりました。

API取得用メソッド

 func getQiitaApi() {
        
        guard let url = URL(string: "https://qiita.com/api/v2/items?page=1&per_page=5") else { return }
        
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        
        let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
            if let error = error {
                print("(1)情報の取得に失敗しました:", error)
                return
            }
            
            if let data = data {
                do {
                    let jsonDecoder = JSONDecoder()

                    //snake_caseをcamelCaseにデコードするように指示
                    jsonDecoder.keyDecodingStrategy = .convertFromSnakeCase

                    let qiita = try jsonDecoder.decode([Qiita].self, from: data)
                    print(qiita)
                } catch {
                    print("(2)情報の取得に失敗しました:", error)
                }
            }
        }
        task.resume()
    }
}

情報の取得に成功すると、取得したQiitaの記事タイトル、作成日、作成者の名前がログに出力されます。

参考

Qiita API v2 ドキュメント 投稿
Jsonのsnake caseを直すのにCodingKeyは必要ない

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?