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.