如何从指定JSON提取特定值到Java ArrayList并在JSP中使用
没问题,我来一步步教你怎么实现从JSON提取数据到Java ArrayList,再在JSP里用上它~
第一步:Java端解析JSON到ArrayList
1. 先定义实体类
JSON里的stops是一个对象数组,每个对象包含固定字段,我们先写一个对应的Java实体类来映射这些数据:
public class Stop { private String atcocode; private double longitude; private double latitude; private int distance; // 必须保留无参构造函数,JSON库需要它实例化对象 public Stop() {} // 生成所有字段的getter和setter方法,JSON库依赖这些来赋值和读取数据 public String getAtcocode() { return atcocode; } public void setAtcocode(String atcocode) { this.atcocode = atcocode; } public double getLongitude() { return longitude; } public void setLongitude(double longitude) { this.longitude = longitude; } public double getLatitude() { return latitude; } public void setLatitude(double latitude) { this.latitude = latitude; } public int getDistance() { return distance; } public void setDistance(int distance) { this.distance = distance; } }
2. 用JSON库解析数据到ArrayList
这里用Jackson(Java Web项目中最常用的JSON处理库)来解析。首先在项目中引入Jackson依赖,如果是Maven项目,在pom.xml中添加:
<dependencies> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> <!-- 替换为最新稳定版即可 --> </dependency> </dependencies>
然后编写解析代码,假设你已经拿到了目标JSON字符串:
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import java.util.ArrayList; import java.util.List; public class JsonParser { public static List<Stop> parseStopsFromJson(String jsonStr) { List<Stop> stopList = new ArrayList<>(); try { ObjectMapper objectMapper = new ObjectMapper(); // 解析整个JSON为JsonNode节点 JsonNode rootNode = objectMapper.readTree(jsonStr); // 提取stops数组节点 JsonNode stopsNode = rootNode.get("stops"); // 将数组转换为ArrayList<Stop> stopList = objectMapper.convertValue( stopsNode, new com.fasterxml.jackson.core.type.TypeReference<ArrayList<Stop>>() {} ); } catch (Exception e) { e.printStackTrace(); // 实际项目中建议用自定义异常处理,不要直接打印堆栈 } return stopList; } }
第二步:在JSP中使用这个ArrayList
通常我们会在Servlet中完成JSON解析,再将ArrayList传递给JSP页面展示。
1. Servlet中传递ArrayList到JSP
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; @WebServlet("/StopListServlet") public class StopListServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 这里替换为你实际获取JSON字符串的逻辑,比如调用接口拿到JSON String jsonStr = "{ \"page\": 1, \"rpp\": 3, \"total\": 3294, \"request_time\": \"2018-04-23T16:10:20+01:00\", \"stops\": [ { \"atcocode\": \"370023715\", \"longitude\": -1.46616, \"latitude\": 53.38248, \"distance\": 57 }, { \"atcocode\": \"370027281\", \"longitude\": -1.46583, \"latitude\": 53.38228, \"distance\": 77 }, { \"atcocode\": \"370022803\", \"longitude\": -1.46616, \"latitude\": 53.38227, \"distance\": 80 } ] }"; // 解析JSON得到站点列表 List<Stop> stopList = JsonParser.parseStopsFromJson(jsonStr); // 将列表存入request属性,供JSP读取 request.setAttribute("stopList", stopList); // 转发到JSP页面 request.getRequestDispatcher("/stopList.jsp").forward(request, response); } }
2. JSP页面遍历展示ArrayList
推荐使用JSTL标签来遍历数据,代码更简洁易维护。首先在JSP中引入JSTL核心标签库:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title>附近公交站点列表</title> </head> <body> <h1>附近公交站点</h1> <table border="1" cellpadding="8"> <tr> <th>ATCO码</th> <th>经度</th> <th>纬度</th> <th>距离(米)</th> </tr> <!-- 用c:forEach遍历stopList,每次循环将当前对象赋值给stop变量 --> <c:forEach items="${stopList}" var="stop"> <tr> <td>${stop.atcocode}</td> <td>${stop.longitude}</td> <td>${stop.latitude}</td> <td>${stop.distance}</td> </tr> </c:forEach> </table> </body> </html>
如果项目还没引入JSTL依赖,Maven项目需要添加:
<dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>
额外注意点
- 如果实体类字段名和JSON字段名不一致,可以用Jackson的
@JsonProperty注解映射,比如实体类字段是atcoCode,JSON是atcocode,就加@JsonProperty("atcocode")在字段上。 - 解析JSON时一定要处理异常,避免因JSON格式错误导致程序崩溃。
- 不推荐在JSP中使用脚本代码(
<% ... %>)遍历,会让页面逻辑和展示代码混杂,维护性差。
内容的提问来源于stack exchange,提问作者kieron
相关产品推荐
相关产品推荐

