【问题标题】:Iterating through JSONArray in JSP using JSTL使用 JSTL 在 JSP 中遍历 JSONArray
【发布时间】:2013-01-22 09:30:05
【问题描述】:

我正在发送带有模型的自定义对象列表,以及作为视图的 JSP。我的自定义对象有一个名为properties 的属性,它是JSONObject。该属性的值为

{"services":[{"name":"abcd"},{"name":"efgh"}]}

现在我想遍历 JSONArray [{"name":"abcd"},{"name":"efgh"}]。这是我正在做的循环

<c:if test="${not empty customObject.services}">
                 <c:forEach items="${customObject.services.getJSONArray(\"services\")}" var="Service" varStatus="rowCounterCh">
                     <li>${Service.name}</li>
                  </c:forEach>
 </c:if>

但这无法遍历 JSONArray。出现以下错误。

javax.servlet.ServletException: javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in &lt;forEach&gt;

那么,我应该怎么做才能遍历 JSONArray?请帮忙

【问题讨论】:

  • 你使用什么具体的 JSONArray 实现?
  • @Taky 抱歉我没听懂那部分:(
  • Java 中有很多 JSON 库。你用哪个? JSONArray 类的欢乐包是什么?

标签: java json spring jstl arrays


【解决方案1】:

我有这样的事情

<c:forEach begin="0" end="${jsonArray.length() -1}" var="index">
     ${jsonArray.getJSONObject(index).getString("name")}
</c:forEach>

${jsonArray.length() -1} 替换为您的jsonArray。在这种情况下,它是这样的

${customObject.services.getJSONArray(\"services\").length()}

【讨论】:

    【解决方案2】:

    对于每个标签,您的项目都应该需要一个基本接口。 JSONArray 既不是 java.util.Collection 也不是 java.util.Iterable。所以对于每个标签实现都不能遍历你传递给 items 属性的集合。

    要解决这个问题,你可以:

    1. 使用 JSP 生成 HTML 列表视图。
    2. 或列表项在 customObject.services.getJSONArray 方法中将 JSONArray 转换为一些适当的集合。 gson 实现中的 JSONArray 应该有方法:iterator,因为它实现了 Iterable 接口。尝试在 #getJSONArray(String) 方法中返回 com.google.gson.JSONArray#iterator() 而不是 JSONArray。

    more detailed explanation

    【讨论】:

    • 我想获取 JSONarray 并在 scriptlet 中处理它,如 var itemStr ='&lt;c:out value="${customObject.services.getJSONArray(\"services\")}"/&gt;'; 但这给了我 json 数组 [{"name":"abcd& #34;},{"name":"efgh"}] 所有的 "s 都替换为 " 我怎样才能避免这种情况?
    • 尝试将 escapeXml 属性设置为 false:tutorialspoint.com/jsp/jstl_core_out_tag.htm
    猜你喜欢
    • 2020-08-23
    • 1970-01-01
    • 2018-03-22
    • 2013-01-15
    • 1970-01-01
    • 2015-06-22
    • 2019-10-20
    • 2016-07-11
    • 2011-10-05
    相关资源
    最近更新 更多