如何获取REST API返回数据对象中currencies字段的首个子对象
Java解析对象结构currencies字段的实现方案
方法1:基于Jackson解析(Spring项目默认集成)
- 无需额外调整实体类结构,直接通过JsonNode读取节点内容即可
代码示例:
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import okhttp3.Response; // 省略OkHttp请求逻辑,拿到响应串responseBody ObjectMapper objectMapper = new ObjectMapper(); JsonNode rootNode = objectMapper.readTree(responseBody); JsonNode currenciesNode = rootNode.get("currencies"); // 空校验避免异常 if (currenciesNode != null && currenciesNode.isObject() && !currenciesNode.isEmpty()) { // 取首个子对象 JsonNode firstCurrency = currenciesNode.fields().next().getValue(); String currencyName = firstCurrency.get("name").asText(); String currencySymbol = firstCurrency.get("symbol").asText(); // 后续业务逻辑 }
方法2:基于Gson解析
- 适合安卓、未集成Jackson的Java项目使用
代码示例:
import com.google.gson.Gson; import com.google.gson.JsonObject; import okhttp3.Response; // 省略OkHttp请求逻辑,拿到响应串responseBody Gson gson = new Gson(); JsonObject rootObj = gson.fromJson(responseBody, JsonObject.class); JsonObject currenciesObj = rootObj.getAsJsonObject("currencies"); // 空校验避免异常 if (currenciesObj != null && !currenciesObj.isEmpty()) { // 取首个子对象 JsonObject firstCurrency = currenciesObj.entrySet().iterator().next().getValue().getAsJsonObject(); String currencyName = firstCurrency.get("name").getAsString(); String currencySymbol = firstCurrency.get("symbol").getAsString(); // 后续业务逻辑 }
注意事项
- 需提前处理currencies为空对象、接口返回null的边界场景,避免抛出空指针或NoSuchElementException
- JSON官方规范未定义对象键的排序规则,但你所使用的国家信息类公开API返回的currencies字段键顺序固定,和之前数组结构的返回顺序一致,可直接沿用该逻辑取首个元素
内容的提问来源于stack exchange,提问作者ZeyoYT
相关产品推荐
相关产品推荐

