如何使用JSTL从JSON字符串输出值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用JSTL从JSON字符串输出值?相关的知识,希望对你有一定的参考价值。
我正在使用JBoss 7.1.3.As.Final并正在构建一个Spring 3.2.11.RELEASE Web应用程序。在我的JSP页面上,我有这个
${jsonString}
我想知道的是假设这个json字符串有一个属性“name”,我如何使用JSTL(最好没有scriptlet)打印出与我的页面“name”属性相关的值?不出所料,这不起作用
${jsonString[‘name’]}
答案
如果您可以使用第三方库(例如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库添加到app classpath以及app lib文件夹)
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添加到你的类路径以及你的app lib文件夹)
<%@ 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代码。
以上是关于如何使用JSTL从JSON字符串输出值?的主要内容,如果未能解决你的问题,请参考以下文章