Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

[Proyecto] Duda: porque resulta "null" en la lectura jSon

Buen día compañeros!!!

Estuve siguiendo los vídeos “01 request y responses” y, “02 utilizando una biblioteca externa” De Java: Consumir API…

Podrían apoyarme por favor leyendo y comentando sobre la siguiente situación "Gson" para extraer datos desde API.

Situación: código modificado del original para seguir el ejercicio con una API distinta, donde...

Utilizo esta variable para contener el jSon en la clase PrincipalDeBusqueda.java

String json = response.body();
                System.out.println("jSon...:\n" + json);
El resultado es que puedo ver todo el contenido jSon.

al utilizar el siguiente bloque obtengo “null

                Exchange miExchange = gson.fromJson(jsonObject, Exchange.class);
                    System.out.println("miExhange...:\n"+miExchange);

Salida de la TERMINAL

miExhange...:
Exchange[result=null, time_last_update_unix=null, time_last_update_utc=null, time_next_update_unix=null, time_next_update_utc=null, base_code=null, conversion_rates=null]
miExhange Result...:
{result=null}

El proyecto Java contiene: Una Monedas.class (al parecer se llama abstracta, Uds. Me corrigen) con constructor, getter y un meotodo override a toString, Un Exchange.java (record DTO class) donde tengo la estructura de un dato por extraer

public record Exchange(String result
    , String time_last_update_unix
    , String time_last_update_utc
    , String time_next_update_unix
    , String time_next_update_utc
    , String base_code
    , String conversion_rates
    )
    { }
//DTO
//recibimos jSon en String

Agradeciendo de antemano su orientación y guía a sus comentarios,

Feliz día Alberto

2 respuestas
solución!

¡Hola Alberto, espero que estés bien!

Entiendo que estás teniendo problemas al extraer datos desde un JSON utilizando la librería Gson en Java. Parece que estás recibiendo "null" al intentar convertir el JSON a un objeto de tipo Exchange. Por lo que puedo ver, estás utilizando un record para representar la estructura de los datos que esperas recibir del JSON, lo cual es una buena práctica.

En cuanto al problema que estás experimentando, es posible que la estructura del JSON no esté coincidiendo exactamente con la estructura del record Exchange que has definido. Es importante que los nombres de los campos en el JSON coincidan exactamente con los nombres de las propiedades en tu record. Además, asegúrate de que los tipos de datos en el JSON coincidan con los tipos de datos que has definido en tu record.

Por ejemplo, si el JSON tiene un campo llamado "result" y en tu record tienes una propiedad llamada "result", pero el JSON devuelve un valor nulo para ese campo, es posible que el problema esté en la forma en que estás mapeando los datos.

Una forma de solucionar esto es revisar detenidamente la estructura del JSON que estás recibiendo y compararla con la estructura de tu record Exchange. Asegúrate de que los nombres de los campos coincidan exactamente y de que los tipos de datos sean los esperados.

Además, ten en cuenta que Gson es sensible a mayúsculas y minúsculas, por lo que los nombres de los campos en el JSON deben coincidir exactamente con los nombres de las propiedades en tu record, incluyendo mayúsculas y minúsculas.

Espero que esta información te sea útil para resolver tu problema. Si necesitas más ayuda con esto, no dudes en preguntar.

¡Espero haber ayudado y buenos estudios!

Buen día Brenda S: muchas gracias por tu pronta respuesta.

Te comento que revisé y comprobé lo siguiente de acuerdo a tu consejo:

…Asegúrate de que los nombres de los campos coincidan exactamente y de que los tipos de datos sean los esperados
Gson es sensible a mayúsculas y minúsculas
coincidiendo exactamente con la estructura del "record Exchange" que has definido, entre otros…

Trabajndo "workaround" con el código y consultando el foro, encontré lo siguiente que hizo que operara la extracción del jSon:

**En la instanciación de la clase "record" utilizaba gson.fromJson(… sin éxito. 
Sin embargo, al utilizar para declaración de new Gson().fromJson(… hizo que operara la extracción de datos del jSon.**
   //Exchange miExchange = gson.fromJson(json, Exchange.class);
      Exchange miExchange = new Gson().fromJson(json, Exchange.class);
            System.out.println("miExhange...:\n"+miExchange.toString());

OUTPUT:

    miExhange...:
    Exchange[result=success, time_last_update_unix=1713916801, time_last_update_utc=Wed, 24 Apr 2024 00:00:01 +0000]
    Success