Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
10
respuestas

PROBLEMA CON EL DESAFIO

Armo Public record MonedaAConvertir(String base_code, Double conversion_rates) , pero aunque consigo obtener el archivo JSON, me resulta imposible pasarlo a objeto java y el resultado es base_code = null, converstion_rates = null ChatGPT me habla de un posible error de mapeo, pero no logro saber cual es. Muchas gracias

10 respuestas

¡Hola Juan, espero que estés bien!

Entiendo que estás teniendo problemas para mapear el archivo JSON a un objeto Java en el desafío del conversor de monedas. Parece que el problema podría estar relacionado con la conversión de los datos del archivo JSON al objeto Java.

Una posible solución a tu problema podría ser utilizar una biblioteca como Gson para realizar el mapeo de forma más sencilla. Aquí tienes un ejemplo de cómo podrías hacerlo:

Supongamos que tienes un archivo JSON con la siguiente estructura:

{
  "base_code": "USD",
  "conversion_rates": {
    "EUR": 0.85,
    "JPY": 110.21,
    "GBP": 0.72
  }
}

Y quieres mapearlo a la siguiente clase Java:

public class ExchangeRate {
    private String base_code;
    private Map<String, Double> conversion_rates;

    // Getters and setters
}

Puedes utilizar Gson para realizar el mapeo de la siguiente manera:

Gson gson = new Gson();
ExchangeRate exchangeRate = gson.fromJson(jsonString, ExchangeRate.class);

Donde jsonString es el string que contiene el archivo JSON.

Espero que esta sugerencia te sea de ayuda para resolver tu problema. ¡Buena suerte con tu desafío!

Espero haber ayudado y ¡buenos estudios!

Además, sería interesante mostrar su código para poder ayudar con más detalles a su problema :)

Hola. Ya te lo paso.

import com.google.gson.FieldNamingPolicy; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse;

public class BuscadorDeMonedas {

MonedaAConvertir BuscaMoneda(String moneda) {
    String direccion = "https://v6.exchangerate-api.com/v6/205d4a250db33ba28208cbc6/latest/" + moneda;

    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(direccion))
            .build();
    HttpResponse<String> response;
    try {
        response = client
                .send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println("Respuesta de la API: " + response.body());
    } catch (IOException | InterruptedException e) {
        throw new RuntimeException(e);
    }
    Gson gson = new GsonBuilder()
            //.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
            .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
            .create();

    MonedaAConvertir monedaEncontrada = gson.fromJson(response.body(), MonedaAConvertir.class);
    return monedaEncontrada;
}

}

public record MonedaAConvertir(String base_code, double conversion_rates) { }

Y el main

public class PrincipalConversor { public static void main(String[] args) { BuscadorDeMonedas consultaMoneda = new BuscadorDeMonedas(); MonedaAConvertir monedaEncontrada = consultaMoneda.BuscaMoneda("ARS"); System.out.println(monedaEncontrada); } }

MUCHAS GRACIAS. De todos modos, el trello me dice que deberia filtrar las monedas del JSON.,segun parece

Hola. Pude al final resolver y obtener un objeto del tipo map de JAVA. La idea es realizar operaciones a través de ese map ¿verdad?

Hola Juan Francisco ¿Podrías compartir tu solución? sería de gran ayuda. Gracias

https://github.com/wilson123q/challenge-conversor aquie les dejo mi proyecto no se si estara bien pero ya mande todo y dice okey sin errrores

Perdon Hero Molina por la demora. Tuve un viernes de locos. Te mando paso a paso lo que hice y espero que junto a la solución que nos ofrece Wilson podamos resolverrlo. Es asi: tu tienes un archivo JSON (el que te da la API). Debes convertirlo a un objeto JAVA, lo que se hace con este código: Gson gson = new GsonBuilder() .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) //.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE) .create();

    MonedaAConvertir monedaEncontrada = gson.fromJson(response.body(), MonedaAConvertir.class);
    return monedaEncontrada
    
    Luego, debes hacer un map, que es una especie de diccionario con un par clave valor (ver documentacin); el método para lograrrlo es el siguiente, el cual, pertenece a la clase MonedaAConvertir: 
    
    import java.util.Map;

public record MonedaAConvertir(String base_code, Map<String, Double> conversion_rates) {

public Map<String, Double> getConversionRates() {
    return this.conversion_rates;
}

Esto te arroja el map sobre el cual deberíamos interactuar y es aqui donde no puedo ayudarte, ya que no he podido resolvelro aun. Exitos y disculpas por la demora, Francisco

Gracias Juan Francisco, un abrazo desde Tlaxcala México!

A ti también Hero. Un abrazo gigante desde el sur del continente, en Argentina. ¡Aguante la raza!