用JSP编写JSON

时间:2010-10-15 15:51:27

标签: java javascript arrays json list

您可能会使用某个库自动执行此操作。但我是Java和JSON的新手,我需要快速解决。

我想要的是从JSP文件中写下(echo)JSON。到目前为止这么好,但现在我有一个对象列表。所以我开始快速枚举。

现在的问题是:如何使用}]代替,关闭JSON数组?通常我在和。中放一个nill或null。

这是我的循环:

 "rides":[{  
<% 
List<Ride> rides = (List<Ride>)request.getAttribute("matchingRides");
            for (Ride ride : rides) { 
%>               
 "ride":{     
     "rideId":"<%= String.valueOf(ride.getId()) %>",
   "freeText":"<%= freeText %>" 
   },                      

     <% 
     }
     %>   
}  ]    

2 个答案:

答案 0 :(得分:5)

1。)在您的应用程序容器中下载并设置GSON 2。)

GSON gson = new GSON();
<%= gson.toJson( rides ) %>;

如果你避开精神错乱的道路,你将在短期和长期内节省时间。

答案 1 :(得分:0)

使用Iterator进行迭代。这样,您可以在循环结束时检查Iterator#hasNext()是否返回true,然后打印,

// Print start of array.
Iterator<Ride> iter = rides.iterator();
while (iter.hasNext()) { 
    Ride ride = iter.next();
    // Print ride.

    if (iter.hasNext()) {
       // Print comma.
    }
}
// Print end of array.

无论如何,我强烈建议使用JSON序列化器,而不是像这样摆弄低级别。我最喜欢的一个是Google Gson。只需在/WEB-INF/lib下载并删除JAR即可。这样,您可以在servlet中得到以下结果:

request.setAttribute("matchingRides", new Gson().toJson(matchingRides));

以及JSP中的以下内容:

${matchingRides}

或使用您问题中的旧式scriptlet:

<%= request.getAttribute("matchingRides") %>