有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何从json JAVA SPRING获取特定数据?

在我工作的公司里,他们让我连接到一个关于实际美元价值的API,并从中获取数据。我得到了,但我得到了一个包含太多数据的JSON,我只需要美元值:

JSON i get

如果你看不到截图,这是我得到的JSON

{
"version": "1.7.0",
"autor": "mindicador.cl",
"codigo": "dolar",
"nombre": "Dólar observado",
"unidad_medida": "Pesos",
"serie": [
    {
        "fecha": "2021-11-08T03:00:00.000Z",
        "valor": 812.4
    }
]
}

我只需要

勇气:812.4

这就是我在JAVA代码中调用API的方式

@Service
public class DolarServiceImp implements DolarService{
@Autowired

private RestTemplate restTemplate;

@Override
public String 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);
    
    ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, requestEntity, String.class);

     return response.getBody(); 
    
}
}

我认为getBody函数可以获取所有数据。我一整天都在试图得到结果,但什么都没有,我的头要爆炸了。提前谢谢


共 (1) 个答案

  1. # 1 楼答案

    如果只需要json中的一个值,而不是完整的JavaBean映射,那么可以使用jsonpath

    RestTemplate restTemplate = new RestTemplate();
    String json  = restTemplate.getForObject("https://api.com/foo", String.class);
    String jsonPathExpression = "$.serie[0].valor"; 
    Double valor = JsonPath.parse(json).read(jsonPathExpression, Double.class);
    

    使用jsonpath,您可以查询json中的任何值,而无需将字段逐个映射到java bean/pojo:

    $.store.book[?(@.price < 10)]

    您可以使用此web来测试jsonpath表达式:

    https://jsonpath.com/