如何从Servlet request.getParameter中的jQuery读取复杂的JSON对象

时间:2012-07-02 11:05:28

标签: jquery json ajax servlets http-request-parameters

我正在使用jQuery创建并发送一个JSON对象,但我无法弄清楚如何使用org.json.simple库在我的Ajax servlet中正确解析它。

我的jQuery代码如下:

var JSONRooms = {"rooms":[]};
       $('div#rooms span.group-item').each(function(index) {
           var $substr = $(this).text().split('(');
           var $name = $substr[0];
           var $capacity = $substr[1].split(')')[0];           
           JSONRooms.rooms.push({"name":$name,"capacity":$capacity});
       });        
       $.ajax({
           type: "POST",
           url: "ParseSecondWizardAsync",          
           data: JSONRooms,        
           success: function() {
               alert("entered success function");
               window.location = "ctt-wizard-3.jsp";
           }
       });

在servlet中,当我使用request.getParameterNames()并将其打印到我的控制台时,我得到参数名称rooms[0][key]等,但我无法以任何方式解析JSON数组房间。我尝试解析request.getParameter("rooms").getParameterValues("rooms")变体返回的对象,但它们都返回空值。

我在jQuery中格式化JSON数据的方式有问题,还是有办法解析我缺少的servlet中的JSON?

要求更多代码,即使servlet仍然非常空,因为我无法弄清楚如何解析数据。

1 个答案:

答案 0 :(得分:2)

data的{​​{1}}参数采用表示请求参数映射的JS对象。因此,您提供给它的任何JS对象都将转换为请求参数。由于您将JS对象普通vanilla传递给它,因此将其视为请求参数映射。您需要通过其请求参数名称表示来访问各个参数。

$.ajax()

您可以通过HttpServletRequest#getParameterMap()方法找到它们:

String name1 = request.getParameter("rooms[0][name]");
String capacity1 = request.getParameter("rooms[0][capacity]");
String name2 = request.getParameter("rooms[1][name]");
String capacity2 = request.getParameter("rooms[1][capacity]");
// ...

您甚至可以按如下方式动态收集所有参数:

Map<String, String[]> params = request.getParameterMap();
// ...

如果您的目的是将其作为真正的JSON对象传递,以便您可以使用JSON解析器将其进一步分解为属性,那么在使用JS / jQuery发送之前必须将其转换为for (int i = 0; i < Integer.MAX_VALUE; i++) { String name = request.getParameter("rooms[" + i + "][name]"); if (name == null) break; String capacity = request.getParameter("rooms[" + i + "][capacity]"); // ... } 并指定String参数如下:

data

这样它可以作为data: { "rooms": roomsAsString } 的JSON字符串使用,您可以使用任意JSON API进行解析。


对具体问题

无关,不要在jQuery中为非jQuery对象使用request.getParameter("rooms")变量前缀。这使得您的代码对JS / jQuery专家来说更加困惑。仅将其用于真正的jQuery对象,而不是普通的普通字符串或基元。

$