如何使用以下输出为货币转换器 API 设计 JSON 解析器实体对象
How to design JSON parser Entity Objects for Currency Converter API with below Output
我正在编写一个应用程序来使用来自外部 API 转换器 https://exchangeratesapi.io/ 的货币值,以将一种货币转换为另一种货币。
例如,https://api.exchangeratesapi.io/latest?base=USD&symbols=GBP 返回以下
{
"rates": {
"GBP": 0.7614025599
},
"base": "USD",
"date": "2019-12-05"
}
或 https://api.exchangeratesapi.io/latest?base=CZK&symbols=IDR 返回以下
{
"rates": {
"IDR": 611.2869231372
},
"base": "CZK",
"date": "2019-12-05"
}
If you notice the above two outputs, currency value pair supplied as an object and the key is
我想为上述输出创建两个 DTO 类 用于 JSON 解析器目的。
Converter.java
class Converter {
private String date;
private RatesObject rates;
private String base;
}
RatesObject.java
public class RatesObject {
private String Currency;
}
现在的实际问题是货币键不是通用键,每次我使用不同货币使用数据时,rates 对象中的键返回原始货币值,例如 'EUR' 或 'USD' 正如我上面提到的。如果货币如下所示以数组形式发送但作为对象返回,我知道如何处理。
{
"rates": [{
"IDR": 611.2869231372
}],
"base": "CZK",
"date": "2019-12-05"
}
有什么处理此类输出的建议吗?
Jackson
提供了 2 种解决方案,请参阅下文。并且因为您已经知道该符号(在请求参数中),您可以通过其名称检索该值。
解决方案 1
将 rates
声明为 JsonNode
:
class Converter {
private String date;
private JsonNode rates;
private String base;
//general getters and setters
}
ObjectMapper mapper = new ObjectMapper();
Converter converterGbp = mapper.readValue(jsonGbp, Converter.class);
System.out.println(converterGbp.getRates().get("GBP").asText()); //0.7614025599
解决方案 2
将 rates
声明为 Map<String, Object>
:
class Converter {
private String date;
private Map<String, Object> rates;
private String base;
//general getters and setters
}
ObjectMapper mapper = new ObjectMapper();
Converter converterGbp = mapper.readValue(jsonGbp, Converter.class);
System.out.println(converterGbp.getRates().get("GBP").toString()); //0.7614025599
我正在编写一个应用程序来使用来自外部 API 转换器 https://exchangeratesapi.io/ 的货币值,以将一种货币转换为另一种货币。
例如,https://api.exchangeratesapi.io/latest?base=USD&symbols=GBP 返回以下
{
"rates": {
"GBP": 0.7614025599
},
"base": "USD",
"date": "2019-12-05"
}
或 https://api.exchangeratesapi.io/latest?base=CZK&symbols=IDR 返回以下
{
"rates": {
"IDR": 611.2869231372
},
"base": "CZK",
"date": "2019-12-05"
}
If you notice the above two outputs, currency value pair supplied as an object and the key is
我想为上述输出创建两个 DTO 类 用于 JSON 解析器目的。
Converter.java
class Converter {
private String date;
private RatesObject rates;
private String base;
}
RatesObject.java
public class RatesObject {
private String Currency;
}
现在的实际问题是货币键不是通用键,每次我使用不同货币使用数据时,rates 对象中的键返回原始货币值,例如 'EUR' 或 'USD' 正如我上面提到的。如果货币如下所示以数组形式发送但作为对象返回,我知道如何处理。
{
"rates": [{
"IDR": 611.2869231372
}],
"base": "CZK",
"date": "2019-12-05"
}
有什么处理此类输出的建议吗?
Jackson
提供了 2 种解决方案,请参阅下文。并且因为您已经知道该符号(在请求参数中),您可以通过其名称检索该值。
解决方案 1
将 rates
声明为 JsonNode
:
class Converter {
private String date;
private JsonNode rates;
private String base;
//general getters and setters
}
ObjectMapper mapper = new ObjectMapper();
Converter converterGbp = mapper.readValue(jsonGbp, Converter.class);
System.out.println(converterGbp.getRates().get("GBP").asText()); //0.7614025599
解决方案 2
将 rates
声明为 Map<String, Object>
:
class Converter {
private String date;
private Map<String, Object> rates;
private String base;
//general getters and setters
}
ObjectMapper mapper = new ObjectMapper();
Converter converterGbp = mapper.readValue(jsonGbp, Converter.class);
System.out.println(converterGbp.getRates().get("GBP").toString()); //0.7614025599