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