Kotlin DSL kullanarak Json Objesi nasıl oluşturulur ?

Normalde Json objesi oluşturmak için aşağıdaki gibi bir yöntem izleriz.

val jsonObject = JSONObject()
jsonObject.put("name","Aykut")
jsonObject.put("age",20)

Bunu Kotlin DSL ile çok daha ergonomik bir şekilde hazırlayabiliriz.

Öncelikle Json isminde bir sınıf oluşturuyoruz ve JsonObject sınıfından kalıtım alıyoruz. Ve DSL kullanabilmek için gerekli custom constructor fonksiyonumuzu yazıyoruz.

class Json() : JSONObject() {
    constructor(json: Json.() -> Unit) : this() {
        this.init()
    }
}

Json objemizi hazırlarken kolaylık olsun diye bir infix fonksiyonu ekliyoruz. Bu sayede "name" to "Aykut" , "age" to 20 gibi değerler girebiliriz.

class Json() : JSONObject() {
    constructor(json: Json.() -> Unit) : this() {
        this.init()
    }

    infix fun <T> String.to(value: T) {
        put(this, value)
    }
}

Json objemizi doldurmak aşağıdaki gibi hazırlayabiliriz.

val json = Json {
    "name" to "Aykut"
    "age" to 20
}

Oluşturduğumuz nesneyi print edersek aşağıdaki gibi bir çıktı elde ederiz.

{"name":"Aykut","age":20}

Kaynaklar