将json数组从servlet转换为javascript变量

时间:2017-04-25 11:45:27

标签: javascript java servlets jstl

我有一个java servlet,它使用数组格式将json对象发送到javascript变量中的jsp页面。

这是我的servlet(它的一部分):

List<HistoryLeavesScalar> returnedPastInfo = SaveDAO.getPastInformation(username);
JSONArray jsonArray = new JSONArray(returnedPastInfo);
String s = jsonArray.toString();
System.out.println("\n\n"+"JSON ARRAY is :  "+s);

HttpSession session = request.getSession(true);
session.setAttribute("jsonArray",jsonArray); 
this.getServletContext().getRequestDispatcher("/calendar.jsp")
.forward(request, response);

system.out.print JSON在我的控制台中是这样的: [{&#34;结束日期&#34;:&#34; 2017年4月22日&#34;&#34; REQ&#34;:&#34; 2017年4月19日&#34;&#34; NR&#34;:2&#34;类型&#34;:&#34; CO&#34;&#34;的startDate&#34;:&#34;二零一七年四月二十零日&#34;&#34 ;德普&#34;:&#34; 2017年4月19日&#34;},{&#34;结束日期&#34;:&#34; 2017年4月22日&#34;&#34; REQ&#34 ;:&#34;二零一七年四月二十零日&#34;&#34; NR&#34;:3,&#34;类型&#34;:&#34; CM&#34;&#34;的startDate&# 34;:&#34; 2017年4月20日&#34;&#34;德普&#34;:&#34; 2017年4月19日&#34;}]

这个Json数组我希望只在这种格式的javascript标签中可见:(这是calendar.jsp - 它的一部分)

    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
    <%@ page import="javax.servlet.jsp.jstl.core.*"%>
    <%@ page import="javax.servlet.jsp.el.*" %> 
    <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
<script type="text/javascript">

    var USER_DAYS   =   [
                <c:forEach items="${jsonArray}" var="jsonArray">


                        {
                            id: '${jsonArray.nr}',
                            date: '${jsonArray.req}',
                            title: '${jsonArray.type}',
                            startDate: '${jsonArray.startDate',
                            endDate: '${jsonArray.endDate',
                            allDay: true,
                            className: 'done'
                        }
               </c:forEach>
    ];
</script>

我不知道如何从USER_DAYS变量(javascript)中来自servlet的json访问值。如何将json中的值放入id,date,title,startDate,endDate。

我不知道jstl是否在javascript标签中工作。我不知道如何打印这些值(不论它们是什么 - 它可以包含许多信息,都是以这种格式)。

我想提一下,如果我将javascript变量更改为这样的东西:它可以正常工作。但这些是我手写的值,但现在我想要它们动态...这些信息必须来自servlet到calendar.jsp。

var USER_DAYS   =   [
      {
          id: 1,
          date: '2017-04-05',
          title: 'CO',
          start: new Date(2017, 3, 5),
          end: new Date(2017, 3, 7),
          allDay: true,
          className: 'done'
      },

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

你已经把它作为字符串:

String s = jsonArray.toString();

s存储在会话中而不是jsonArray;

session.setAttribute("jsonArray", s); 

并将其打印在servlet中:

var USER_DAYS = ${jsonArray};

我的测试

Java servlet(带有示例数据):

enter image description here

bingo.jsp

enter image description here

HTML结果:

enter image description here

渲染结果:

enter image description here

有效。

答案 1 :(得分:0)

你可以这样写

<script>
    var DAYS = '${jsonArray}';
    if(DAYS.length > 0 ){
    var USER_DAYS = {
            id: DAYS[0].nr,
            date: DAYS[0].req,
            title: DAYS[0].type,
            startDate: new Date(DAYS[0].startDate),
            endDate: new Date(DAYS[0].endDate),
            allDay: true,
            className: 'done'
        };
    }
</script>

答案 2 :(得分:0)

您可以将jsonString解析为javascript JSON对象。然后,您想要更改json个对象的某些对象键,再删除一个额外的键[e.g "Dep":"2017-04-19"],最后想要在最终的json中添加两个键值对象

allDay: true,
className: 'done'

这是solution.set数据作为json字符串。

session.setAttribute("jsonArray",jsonArray.toString()); 

在你的jsp中

var USER_DAYS = JSON.parse('${jsonArray}');

这将生成一个名为JSON的{​​{1}}对象。 最后修改你的JSON对象,

&#13;
&#13;
USER_DAYS
&#13;
&#13;
&#13;

请参阅 JSFIDDLE