Estoy usando Gsson para convertir JSON to Kotlin data class . Al crear un objeto de clase de datos, quiero analizar el valor en el método init . Pero init nunca llamó y los valores del objeto generado son nulos.
data class Configuration (val groupId:Int, val key:String, val source:String){ val query:String val search:String init { val obj = JSONObject(key) query = obj.getString("q") search = obj.getString("search") } } Cuando obtuve el objeto de Configuración de Gson , el valor de query y search siempre es null y el bloque de init nunca se ejecutó. También probé el constructor y sin la palabra clave data , los resultados son los mismos.
El bloque init solo se ejecuta cuando se llama al constructor principal. Pero gson no llama al constructor principal cuando analiza json para objetar.
Para resolver esto, creo que debería implementar la query y search como un método de obtención o usar el inicio perezoso. Algo como esto:
data class Configuration(val groupId: Int, val key: String, val source: String) { var query: String = "" get() { if (field == null) { initInternal() } return field } private set var search: String? = null get() { if (field == null) { initInternal() } return field } private set private fun initInternal() { val obj = JSONObject(key) query = obj.getString("q") search = obj.getString("search") } }o cualquier otro enfoque que se adapte mejor a sus necesidades.