You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Spring调用API返回JSON如何提取指定字段valor的数值?

方案1:定义POJO映射JSON结构(Spring项目推荐规范写法)

该方式契合Spring生态的最佳实践,后续接口结构调整时维护成本更低。
首先根据返回的JSON结构定义对应的映射实体类:

// 对应serie数组内的单个元素结构,若用Lombok可加@Data注解省略getter/setter
public class SerieItem {
    private String fecha;
    private Double valor;

    // 手动补全get、set方法
    public Double getValor() {
        return valor;
    }
    public void setValor(Double valor) {
        this.valor = valor;
    }
    public String getFecha() {
        return fecha;
    }
    public void setFecha(String fecha) {
        this.fecha = fecha;
    }
}
// 对应接口返回的外层JSON结构,若用Lombok可加@Data注解省略getter/setter
public class DolarApiResponse {
    private String version;
    private String autor;
    private String codigo;
    private String nombre;
    private String unidad_medida;
    private List<SerieItem> serie;

    // 手动补全get、set方法
    public List<SerieItem> getSerie() {
        return serie;
    }
    public void setSerie(List<SerieItem> serie) {
        this.serie = serie;
    }
    // 其余字段的get、set方法可按需补充
}

修改后的Service层代码如下,直接让RestTemplate自动完成JSON到实体类的映射,提取目标值:

@Service
public class DolarServiceImp implements DolarService{
    @Autowired
    private RestTemplate restTemplate;

    @Override
    public Double getDolar() {
        HttpHeaders headers = new HttpHeaders();
        headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
        MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
        String url = "https://mindicador.cl/api/dolar/08-11-2021";
        HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(map, headers);
        // 将响应直接映射为我们定义的DolarApiResponse实体
        ResponseEntity<DolarApiResponse> response = restTemplate.exchange(url, HttpMethod.GET, requestEntity, DolarApiResponse.class);
        // 提取serie数组第一个元素的valor值,可根据业务需要补充空指针判断逻辑
        return response.getBody().getSerie().get(0).getValor();
    }
}

方案2:无需定义实体类,直接用Jackson解析JSON字符串

如果不想额外创建实体类,可以直接解析返回的JSON字符串提取目标字段,Spring Boot已经内置Jackson依赖无需额外引入:

@Service
public class DolarServiceImp implements DolarService{
    @Autowired
    private RestTemplate restTemplate;
    // 直接注入Spring自动配置好的Jackson序列化工具
    @Autowired
    private ObjectMapper objectMapper;

    @Override
    public Double getDolar() throws JsonProcessingException {
        HttpHeaders headers = new HttpHeaders();
        headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
        MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
        String url = "https://mindicador.cl/api/dolar/08-11-2021";
        HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(map, headers);
        ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, requestEntity, String.class);
        // 解析JSON字符串为节点树
        JsonNode rootNode = objectMapper.readTree(response.getBody());
        // 直接定位到serie数组第一个元素的valor字段
        return rootNode.get("serie").get(0).get("valor").asDouble();
    }
}

注意事项

两种方案都建议补充空值校验逻辑,避免接口返回结构异常时出现空指针报错。

内容的提问来源于stack exchange,提问作者coder4life

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:54:03