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

Ya tengo el JSON, pero no puedo extraer la info

String direccion = "https://v6.exchangerate-api.com/v6/[mikey]/latest/USD";

    HttpClient client = HttpClient.newHttpClient();

    HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(direccion))
            .build();

    HttpResponse<String> response = client
            .send(request, HttpResponse.BodyHandlers.ofString());

    String json = response.body();
    System.out.println(json);
4 respuestas

Hola Hero,

Gracias por compartir tu experiencia con nosotros. Recuerda que estamos aquí para ayudarte. Si necesitas más ayuda, no dudes en buscarnos en el foro.

¡Gracias nuevamente!

Saludos,

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios!

¿Me pueden orientar cómo hacer para sacar la info el JSON? Por ejemplo, me da algo así:

{
  "base_code": "USD",
  "conversion_rates": {
   "USD":1,
  "AED":3.6725,
  "AFN":72.1295,
  "ALL":94.2989,
  ...
  }
}

Pero no logro extraer el valor de la conversión, por ejemplo, el de "AED":3.6725, no logro sacar el valor 3.6725 de AED. ¿Pueden orientarme, por favor?

solución!

Mira si te fijas la informacion que se requiere esta dentro de "conversion_rates" y la manera en que yo lo solucione fue como una doble extraccion

HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://v6.exchangerate-api.com/v6/1bc544c4c68ea14d8f367750/latest/"+monedaInicial))
                .build();
        HttpResponse<String> response = client
                .send(request, HttpResponse.BodyHandlers.ofString());

        String json = response.body();

        Gson gson = new GsonBuilder().create();
        ResponseDTO responseDTO = gson.fromJson(json, ResponseDTO.class);

Y para encapsularlo

public record ResponseDTO(ConversionRatesDTO conversion_rates) {}
package DTO;

//Aquie se encapsula especificamente las monedas que se requieren
public record ConversionRatesDTO(
        double MXN, double USD, double BWP, double DOP, double IQD,
        double UZS, double SOS, double RWF, double JPY, double BHD
) {}

Espero sea de ayuda.

Excelente, muchas gracias.

Finalmente se puede ya usar, por ejemplo:

        ResponseDTO responseDTO = gson.fromJson(json, ResponseDTO.class);
        System.out.println(responseDTO.conversion_rates().MXN());
        System.out.println(responseDTO.conversion_rates().USD());
        System.out.println(responseDTO.conversion_rates().BWP());

Da como salida (con el tipo de cambio del momento) :
17.081
1.0
13.879

¡Muchas gracias, Carlos!