java - 如何为具有以下输出的货币转换器 API 设计 JSON 解析器实体对象

标签 java json jsonparser

我正在编写一个应用程序来使用外部 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": [{
        "IDR": 611.2869231372
    }],
    "base": "CZK",
    "date": "2019-12-05"
}

对于处理此类输出有什么建议吗?

最佳答案

这里有 2 个解决方案来处理这个问题 Jackson ,请参见下文。而且由于您已经知道该符号(在请求参数中),因此您可以通过其名称检索该值。

解决方案1
声明ratesJsonNode :

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
声明ratesMap<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

关于java - 如何为具有以下输出的货币转换器 API 设计 JSON 解析器实体对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59204195/

相关文章:

android - 使用gson解析json文件

android - json解析错误: type org. json.JSONArray无法转换为JSONObject

java - 生产者/消费者场景中的双向流

java - 如何在反序列化 JSON 响应时使用 Gson 处理 NumberFormatException

java - struts2中找不到struts dispatcher

php - 使用android volley post请求从MySQL中选择数据并将其显示在recyclerview中

jsonparser 按索引访问字段

java - 使用 Java 解析嵌套 JSONArray

java - 来自外部 jar 的 seam i18n 属性文件

java - Spring MVC @RequestMapping 注释的不区分大小写的映射