es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Reflexión de Kotlin en objeto anónimo usando kotlin-reflect.

Estoy recibiendo un objeto JSON que tiene una propiedad cuyo nombre es desconocido en tiempo de compilación.

El nombre de la propiedad se encuentra almacenado en una variable.

Ya que el nombre de la propiedad puede variar, el JSON se analiza como un objeto anónimo.

¿Es posible leer el valor de la propiedad mediante reflexión usando el nombre almacenado en la variable?

Intenté con código similar a este:
jsonResponse::class.memberProperties.find { it.name == variableName }
sin éxito.

java
val decodedToken = JWT(jwtString)
decodedToken.getClaim("useful_claim").asObject(Any::class.java)?.let {
// Obtener la propiedad que coincide con el nombre de la variable
val reflectProp = res::class.memberProperties.find { it.name == BuildConfig.VARIABLE_NAME }
// Verificar que se encontró y existe la propiedad
if (reflectProp is KMutableProperty<>) {
(reflectProp.getter.call(res, BuildConfig.VARIABLE_NAME) as? List<
>)?.let {
// Devolverlo como una lista de MyClass existentes
return it.filterIsInstance<MyClass>()
}
}
}

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, es posible leer el valor de la propiedad usando reflexión, con el nombre almacenado en una variable. Una forma de hacer esto es usando la propiedad javaClass del objeto JSON para obtener la clase, y luego acceder a las propiedades miembro a través de reflexión.

    val jsonObject = JSONObject(jsonString)
    val propertyName = "miPropiedadDinamica"
    val propertyValue = jsonObject.opt(propertyName)
    
    // Usando reflexión
    val jsonClass = jsonObject.javaClass
    val property = jsonClass.getDeclaredField(propertyName)
    property.isAccessible = true
    val value = property.get(jsonObject)
    

    En este ejemplo, se utiliza el método opt para obtener el valor de la propiedad del objeto JSON. Luego, se usa la reflexión para acceder a la clase y al campo del objeto, y obtener el valor a través del método get.

    Tenga en cuenta que si la propiedad no se encuentra o no se puede acceder, se lanzará una excepción. Es importante asegurarse de que la propiedad exista y se pueda acceder antes de intentar obtener su valor.

Comments are closed.