Вам необходимо изменить свой класс CurrencyData, чтобы он мог выглядеть так, чтобы он мог использовать ваш результат API.
public final class CurrencyData {
@SerializedName("rates")
private Map<String, BigDecimal> rates = new HashMap<>();
@SerializedName("base")
private String base;
@SerializedName("date")
private String date;
public Map<String, BigDecimal> getRates() {
return rates;
}
public void setRates(Map<String, BigDecimal> rates) {
this.rates = rates;
}
public String getBase() {
return base;
}
public void setBase(String base) {
this.base = base;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
}
Теперь вы можете сделать следующий пример.
Gson gson = new Gson();
CurrencyData data = new CurrencyData();
data.setBase("USD");
data.setDate("2019-01-01");
Map<String, BigDecimal> ratesMap = new HashMap<>();
ratesMap.put("SEK", new BigDecimal("9.1"));
ratesMap.put("DKK", new BigDecimal("8.2"));
data.setRates(ratesMap);
String json = gson.toJson(data);
System.out.println(json);
Какие отпечатки:
{"base":"USD","date":"2019-01-01","rates":{"DKK":8.2,"SEK":9.1}}
Вы также можете отменить процесс следующим образом.
CurrencyData parsedData = gson.fromJson(json, CurrencyData.class);
// Prints only the "rates"
System.out.println(parsedData.getRates().toString());
Какие отпечатки:
{DKK=8.2, SEK=9.1}