在jsp中访问JSONObject

时间:2011-05-26 17:52:12

标签: json jsp

我的JSP正在上下文中传递一个JSONObject,它需要在其上进行一些处理,比如创建表等。

但是当我尝试访问此对象的成员时,它会出现以下错误 - (此对象中某个键的名称可以)

 Servlet.service() for servlet jsp threw exception { javax.servlet.jsp.el.ELException:
 Unable to find a value for "ok" in object of class "org.json.JSONObject" using operator "."

访问它的JSP代码看起来像这样 -

<%@ taglib uri =“http://java.sun.com/jsp/jstl/core”prefix =“c”%>

<c:if test="${serviceOutput.ok}">
    <c:if test="${serviceOutput.ret.proposalCount} > 0">
.....

任何人都可以建议我如何解决此问题并成功访问此对象的所有成员?

2 个答案:

答案 0 :(得分:1)

EL仅了解JavabeansMap。您需要让预处理servlet将JSONObject的每个项目转换为具有可在EL中使用的getter方法或Map的完整Javabean。

以下是将其转换为Map

的示例
Map<String, Object> serviceMap = new HashMap<String, Object>();
serviceMap.put("ok", serviceOutput.getBoolean("ok"));
serviceMap.put("foo", serviceOutput.getString("foo"));
// ...

request.setAttribute("serviceMap", serviceMap);
request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response);

这样,像${serviceMap.ok}这样的EL表达式就可以了。

答案 1 :(得分:1)

现在可以采用的另一个选项是使用不同的JSON解析库,例如json-simple(http://code.google.com/p/json-simple/)。此库中的JSONObject扩展了HashMap,JSONArray扩展了一个ArrayList,因此EL应该使用它们。然后,您不必更改您的jstl或进行额外的解析。