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
}