我正在使用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仍然非常空,因为我无法弄清楚如何解析数据。
答案 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对象,而不是普通的普通字符串或基元。
$