繁体   English   中英

如何使用以下输出为货币转换器 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 

我想为 JSON 解析器的目的为上述输出创建两个 DTO 类。

转换器.java

class Converter {
    private String date;
    private RatesObject rates;
    private String base;
}

利率对象.java

public class RatesObject {
    private String Currency;
}

现在的实际问题是货币键不是通用的,每次我用不同的货币消费数据时,利率对象内的键都会返回原始货币值,如我上面提到的“欧元”或“美元”。 我知道如何处理货币是否以数组形式发送,如下所示,但它作为对象返回。

{
    "rates": [{
        "IDR": 611.2869231372
    }],
    "base": "CZK",
    "date": "2019-12-05"
}

任何处理此类输出的建议?

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

解决方案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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM