Я пытаюсь создать DSL для создания JSONObjects. Вот класс строителя и пример использования:
import org.json.JSONObject
fun json(build: JsonObjectBuilder.() -> Unit): JSONObject {
val builder = JsonObjectBuilder()
builder.build()
return builder.json
}
class JsonObjectBuilder {
val json = JSONObject()
infix fun <T> String.To(value: T) {
json.put(this, value)
}
}
fun main(args: Array<String>) {
val jsonObject =
json {
"name" To "ilkin"
"age" To 37
"male" To true
"contact" To json {
"city" To "istanbul"
"email" To "[email protected]"
}
}
println(jsonObject)
}
Вывод вышеуказанного кода:
{"contact":{"city":"istanbul","email":"[email protected]"},"name":"ilkin","age":37,"male":true}
Работает так, как ожидалось. Но он создает дополнительный экземпляр JsonObjectBuilder каждый раз, когда он создает объект json. Можно ли написать DSL для создания объектов json без лишнего мусора?