Jsonのsnake caseを直すのにCodingKeyは必要ない

はじめに

以下のようなsnake caseをcamel caseに直すためにCodingKeyを使っていましたが使わなくても変更できるようです

{
	"file_name": "hogehoge.txt",
	"snake_key": "スネークケース"
}

CodingKeyを使ったやり方

パースするところ

let path: String = Bundle.main.path(forResource: "test", ofType: "json")!
var jsonData: Parser!
        do {
            let content = try String(contentsOfFile: path)
            jsonData = try JSONDecoder().decode(Parser.self, from: content.data(using: .utf8)!)
        } catch {
            // Error handling
        }

parse用の構造体

構造体の中にenumを定義してそこでsnake caseをcamel caseに変換しています。

struct Parser: Codable{
    var fileName: String
    var snakeKey: String
    private enum CodingKeys: String, CodingKey {
        case fileName = "file_name"
        case snakeKey = "snake_key"
    }
}

CodingKeyを使わないやり方

パースするところ

JSONDecoderのkeyDecodingStrategyに.convertFromSnakeCaseを設定!

let path: String = Bundle.main.path(forResource: "test", ofType: "json")!
        var jsonData: Parser!
        do {
            let jsonDecoder = JSONDecoder()
            jsonDecoder.keyDecodingStrategy = .convertFromSnakeCase
            let content = try String(contentsOfFile: path)
            jsonData = try jsonDecoder.decode(Parser.self, from: content.data(using: .utf8)!)
        } catch {
            // Error handling
        }

parse用の構造体

構造体の中で変換の処理がなくなるのでスッキリ!!

struct Parser: Codable{
    var fileName: String
    var snakeKey: String
}

参考文献

Swift 4.1 improves Codable with keyDecodingStrategy

Codableについて色々まとめた[Swift4.x]