如果您可以使用第三方库(例如 Jackson),则完成此功能应该相当简单。不过,您仍然需要创建一些 java 文件才能完成这项工作。首先,创建一个与您的 json 数据匹配的 POJO(在您的情况下,Employee 可能是其他东西,但您的 POJO 应该与您的字段匹配)。
public class Employee{
private String name;
private int age;
private String company;
public String getName(){
return name;
}
public String getCompany(){
return company;
}
public Integer getAge(){
return age;
}
//implement setters
}
接下来,像这样为 Employee 类创建一个列表包装器
public class EmployeeList {
public List<Employee> employees=new ArrayList<Employee>();
}
现在,创建一个 JsonParser 类(将 Jackson 库添加到应用程序类路径以及您的应用程序库文件夹)
import org.codehaus.jackson.map.ObjectMapper;
public class JsonParser {
ObjectMapper objectMapper=new ObjectMapper();
public <T> T parseJson(String json,Class<T> targetType)throws Exception{
//uncomment this line if you want to ignore some fields, they dont have to be in your POJO then
//objectMapper.configure(Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
return objectMapper.readValue(json, targetType);
}
}
请注意,JsonParser 可以处理任何类型,而不仅仅是 Employee。现在,在你的jsp中
添加以下导入(将 jstl-1.2.jar 添加到您的类路径以及您的应用程序库文件夹中)
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
将以下代码添加到正文部分
<body>
<%@ page import="java.util.List"%>
<%@ page import="apps.simpleweb.json.JsonParser"%>
<%@ page import="apps.simpleweb.data.Employee"%>
<%@ page import="apps.simpleweb.data.EmployeeList"%>
<%
//example json string ; note that employees matches the list name
String jsonString = "{ \"employees\": [ {\"name\": \"Peter\", \"age\": 25, \"company\": \"XXXX\" },{ \"name\": \"Mark\", \"age\":45, \"company\": \"XXXX\"} ] }";
JsonParser parser = new JsonParser();
EmployeeList empList = parser.parseJson(jsonString, EmployeeList.class);
request.setAttribute("employeeList", empList.employees);
%>
<c:forEach items="${employeeList}" var="employee" >
<c:out value="Name : ${employee.name}" />
<c:out value="Age : ${employee.age}" />
</c:forEach>
如果您将解析移至 servlet,您应该能够完全避免使用 scriptlet 代码。