Gson en Kotlin
uso de Gson en Kotlin
Gson (también conocido como Google Gson) es una biblioteca de código abierto para el lenguaje de programación Java y para Android que permite la conversión entre objetos Java y su representación en notación JSON de una manera sencilla, simplemente invocando los métodos toJson() o fromJson().
Ejemplo de uso: Gson en Wikipedia
Proyecto en GitHub: google-gson
Documentación de Gson: Javadoc
Dependencias en Gradle:
implementation 'com.google.code.gson:gson:2.12.1'
Ejemplo: Lista de contactos usando Gson

contacts.json
{ "contactos":[
{
"name": "Angelina Jolie",
"address": "calle los remedios, 29007",
"city": "Málaga",
"phones": {
"landline": "555-123-4567",
"mobile": "603459530",
"work": "555-111-2222"
}
},
{
"name": "Nikole Kidman",
"address": "calle hilera, 29010",
"city": "Málaga",
"phones": {
"landline": "555-246-8010",
"mobile": "625459540",
"work": "555-456-7890"
}
},
{
"name": "Jennifer Lopez",
"address": "calle larios, 29002",
"city": "Málaga",
"phones": {
"landline": "555-789-0123",
"mobile": "628659550",
"work": "555-101-1122"
}
}
]
}
Añadir contacts.json a la carpeta assets
Crear la clases necesarias para hacer la conversión con Gson
¿clase Telefono?
¿clase Contacto?
¿clase Persona?
Ayuda: jsonschema2pojo
Otra forma de obtener las clases: JSON to Kotlin Data Class Generator Online
Otra forma de obtener las clases en Kotlin: Plugin JSon to Kotlin Class
Phones.kt
import com.google.gson.annotations.SerializedName
data class Phones(
@SerializedName("landline")
val landline: String,
@SerializedName("mobile")
val mobile: String,
@SerializedName("work")
val work: String
)
Contacto.kt
import com.google.gson.annotations.SerializedName
data class Contacto(
@SerializedName("address")
val address: String,
@SerializedName("city")
val city: String,
@SerializedName("name")
val name: String,
@SerializedName("phones")
val phones: Phones
)
Persona.kt
import com.google.gson.annotations.SerializedName
data class Persona(
@SerializedName("contactos")
val contactos: List<Contacto>
)
Modificación de las clases del ejercicio anterior:
Telefono.kt
import com.google.gson.annotations.SerializedName
data class Telefono(
@SerializedName("landline")
val casa: String,
@SerializedName("mobile")
val movil: String,
@SerializedName("work")
val trabajo: String
)
Contacto.kt
import com.google.gson.annotations.SerializedName
data class Contacto(
@SerializedName("name")
val nonmbre: String,
@SerializedName("address")
val direccion: String,
@SerializedName("city")
val ciudad: String,
@SerializedName("phones")
val telefono: Telefono
)
obtenerContactos()
fun obtenerContactos(): ArrayList<Contacto> {
var contactos: ArrayList<Contacto> = ArrayList()
lateinit var contenido: String
lateinit var gson: Gson
lateinit var persona: Persona
try {
if (!binding.switch1.isChecked) {
// Analizar contactos
contenido = leerAsset(applicationContext, CONTACTOS)
contactos = analizarContactos(contenido)
} else {
// usar Gson
}
} catch (e: IOException) {
Log.e("Error: ", e.message.toString())
mostrarMensaje("Error: " + e.message.toString())
} catch (e: JsonSyntaxException) {
Log.e("Error: ", e.message.toString())
mostrarMensaje("Error: " + e.message.toString())
} catch (e: JSONException) {
//e.printStackTrace();
Log.e("Error: ", e.message.toString())
mostrarMensaje("Error: " + e.message.toString())
}
return contactos
}








Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.