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>()
}
}
}
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.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étodoget
.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.