Swift Struct Nesnelerin SnakeCase JSON’a göre Modellenmesi

Hakan Mirasoglu
FLO Teknoloji
Published in
2 min readJun 15, 2023

Merhaba, bugün sizlere API servislerinde dönen JSON’larda Snake Case isimlendirme standardıyla gelen değerleri “CodingKeys” keyword’ ü olmadan swift’ in en yaygın isimlendirme standartı olan Camel Case standartına dönüştürmeyi anlatmaya çalışacağım.

Hadi başlayalım!!

Aşağıdaki örnek JSON üzerinden ilerlemeye çalışacağım.


{
"productId": 100,
"product_name": "Nike",
"product_description": "Bağcıklı"
}

Yazılım Dünyasında bazı isimlerdirme standartları mevcuttur.

  • Snake Case Örnek: error_value, product_name
  • Camel Case Örnek: errorValue, productName
  • Pascal Case Örnek: ErrorValue, ProductName

Yukarıdaki isimlendirme standartları en çok kullanılanlarıdır, fakat daha da artırılabilir.

Konumuza dönecek olursak Swift programlama dilinde en yaygın standart Camel Case isimlendirme standardıdır.

Yukarıdaki örnek JSON da olduğu gibi bazen API’lar Camel Case dışında da isimlendirmeler ile gelebilir. Örnek JSON’da Snake Case isimlendirmeleriyle gelen bazı değişkenlerimiz mevcut. Bu durumda Swift kendine özgü decoding keyword lerinden “CodingKeys” kullanılabilir.

Peki CodingKeys Nedir?

struct Product: Codable {
var productId: Int?
var productName: String?
var productDescription: String?

private enum CodingKeys: String, CodingKey {
case productId = "productId"
case productName = "product_name"
case productDescription = "product_description"
}
}

Pekişmesi adına yukarıdaki gibi bir Model Objesi oluşturdum. Yukarıda bazı Swift özelinde keyword’ler mevcut onlara da değinmek istiyorum.

Codable: Encoding&Decoding İşlemlerimize yarayan bir protokoldür.

CodingKeys: Enum yapısıyla kullanılan bu özellik modelimizdeki isimleri istediğimiz bir şekilde manipule edip yazmamıza yarıyor. Bu işi yaparken de “CodingKey” protokollerinden faydalanıp JSON daki keyleri düzenlememize yardım ediyor.

Proje içerisinde kullanımı;

let sampleProduct = Product()

sampleProduct.productName ⬅️

CodingKeys” ile artık projemizin heryerinde JSON dan “product_name” gelmesine rağmen “productName” e dönüştürdük ve artık bu isimlendirme ile projede devam edebiliriz.

Bugün asıl değinmek istediğim ve “CodingKeys” özelliği olmadan faydalanacağımız özellik “JSONDecoder” nesnesine ait decode etme stratejisi olan “convertFromSnakeCase” özelliğidir.

JSONDecoder Nesnesi & ConvertFromSnakeCase

let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase

Evet yukarıdaki JSONDecoder -> nesnesi servis responselarını kendine özel standartları ile decode etme imkanı sunabiliyor.

  • Yukarıdaki kod parçasında gördüğümüz “.convertFromSnakeCase” özelliği bize response dan gelen Snake Case standartlarını Camel Case standartına tek bir hareketle convert etmemize olanak sağladı. Bu özelliği kullanarak artık model nesnemiz aşağıdaki gibi temiz bir forma dönüştü. 💪🏼
struct Product: Codable {
var productId: Int?
var productName: String?
var productDescription: String?
}

Tekrardan sample product modeli oluşturduğumuzda artık değişkenleri Camel Case formatına göre modellemiş olduk.

Sonuç:

Bugün sizlere “EncodingKeys” özelliği olmadan “ConvertFromSnakeCase” özelliği ile swift standartına uygun modelleme yapabildik.

Faydalı olması ümidiyle bir sonraki yazımda görüşmek üzere Sevgiler..

--

--