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

我正在使用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] etcetera,但我无法以任何方式解析JSON Array房间。 我试过解析request.getParameter("rooms").getParameterValues("rooms")变量返回的对象,但它们都返回一个空值。

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

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

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

 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]"); // ... 

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

 Map params = request.getParameterMap(); // ... 

您甚至可以动态收集所有参数,如下所示:

 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]"); // ... } 

如果您的目的是将它作为一个真正的JSON对象传递,以便您可以使用JSON解析器将其进一步分解为属性,那么您必须在使用JS / jQuery发送之前将其转换为String并指定data参数,如下所示:

 data: { "rooms": roomsAsString } 

这样,它可以通过request.getParameter("rooms")作为JSON字符串使用,您可以使用任意JSON API进行解析。


具体问题无关 ,不要在jQuery中为非jQuery对象使用$ variable前缀。 这使得您的代码对JS / jQuery专家来说更加困惑。 仅将其用于真正的jQuery对象,而不是普通的vanilla字符串或基元。

 var $foo = "foo"; // Don't do that. Use var foo instead. var $foo = $("someselector"); // Okay.