1

我正在使用 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 仍然是空的,因为我不知道如何解析数据。

4

1 回答 1

2

data参数$.ajax()接受一个表示请求参数映射的 JS 对象。因此,您提供给它的任何 JS 对象都将转换为请求参数。由于您将 JS 对象简单地传递给它,因此它被视为请求参数映射。您需要通过准确的请求参数名称表示来访问各个参数。

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<String, String[]> 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 解析器将其进一步分解为属性,那么您必须String在使用 JS/jQuery 发送之前将其转换为 a 并指定data如下参数:

data: { "rooms": roomsAsString }

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


与具体问题无关,不要$在 jQuery 中为非 jQuery 对象使用变量前缀。这会使您的代码对 JS/jQuery 专家更加困惑。仅将它用于真正的 jQuery 对象,而不用于普通的香草字符串或原语。

var $foo = "foo"; // Don't do that. Use var foo instead.
var $foo = $("someselector"); // Okay.
于 2012-07-02T12:52:48.687 回答