如何使用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字符串输出值?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Pentaho xaction 输出 JSON?

从片段中的json获取值

我如何从 json 中取出值并在 NSLog 中显示它们

如何从片段中的 JSON 响应中的对象获取数据

使用 JSTL 循环遍历地图 [重复]

jstl嵌套以及输出json的逗号