java后端处理http响应的json字符串,提取出这个json字符串中的value 值,

梁勇
2023-12-01

后端如何向第三方接口进行请求

问题:java后端访问另外一个后端的接口后得到一个json字符串,如何提取出这个json字符串中的value 值,第一个value值“ok”忽略,其余的三个value值分别代表 湿度,继电器状态,温度。

{"errno":0,"data":{"count":4,"datastreams":[{"datapoints":[{"at":"2021-05-05 09:05:14.971","value":"OK"}],"id":"RET"},{"datapoints":[{"at":"2021-05-06 17:42:27.000","value":36}],"id":"SD"},{"datapoints":[{"at":"2021-05-05 09:05:14.973","value":"0"}],"id":"BEEP"},{"datapoints":[{"at":"2021-05-05 09:05:14.974","value":"28"}],"id":"WD"}]},"error":"succ"}

解决方案:

1.首先利用 在线Json生成Java实体类工具网站 生成 java 实体类JsonsRootBean,Datapoints,Datastreams,Data,把这些实体类复制到项目中
2.然后在pom.xml 中添加依赖
 <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.28</version>
</dependency>
3. 利用 fastjson 把 json字符串转为 jsonsRootBean 类
JsonsRootBean jsonTest = JSONObject.parseObject(message,JsonsRootBean.class);

之后再通过 JsonsRootBean对象 jsonTest 拿到value的值

String value[]=new String[3];
for(int i=1,j=0;i<4;i++){
   value[j++] = jsonTest.getData().getDatastreams().get(i).getDatapoints().get(0).getValue();
}
4.把拿到的 value 存到Session中,方便跳转到前端页面时,前端进行取
       HashMap<String,String > hashMap =new HashMap<>();
        hashMap.put("湿度",value[0]);
        hashMap.put("报警",value[1]);
        hashMap.put("温度",value[2]);
        request.getSession().setAttribute("map",hashMap);
       
5. 保存value到数据库
        DHT dht =new DHT();
        dht.setWendu(value[0]);
        dht.setBaojing(value[1]);
        dht.setShidu(value[2]);
        testServeice.save(dht);//保存到数据库
6. 返回到前端页面

return “test”;

7. 前端页面进行显示

通过 第4部保存的map拿到显示的数据

<%@ page language="java" contentType="text/html; charset=utf-8"
                pageEncoding="utf-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Insert title here</title>
</head>
<body>
<h1 align="center" ><font color ="red">大棚温湿度检测</font></h1>
</br>
<c:forEach var="entry" items="${map}" >
  <h1 align ="center">
   ${entry.key}
   ${entry.value}<br/>
  </h1>
</c:forEach>

</body>
</html>
 类似资料: