当前位置: 首页 > 面试题库 >

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

齐运诚
2023-03-14
问题内容

我正在使用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
Array房间。我尝试解析由request.getParameter("rooms").getParameterValues("rooms")变体返回的对象,但是它们都返回null值。

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

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


问题答案:

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发送之前将其转换为,并指定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.


 类似资料:
  • 我正在编写一个API控制器,用于接收和解析JSON异步帖子的内容,但无法读取该帖子中StringContent对象的内容。 这是我的API控制器中我希望看到值的部分。到达ApiController方法的值为null。jsonContent值是一个空字符串。我希望看到的是JSON对象的内容。 这是我的控制器来显示它是如何被调用的。 这就是发布方法。 我怀疑ApiController中Post方法的签

  • 我得到了一个复杂的JSON字符串,如下所示。 这还不完整。但这怎么读呢?

  • 问题内容: 我想在我的JQuery代码中将json响应读取为名称和值对。这是我从Java代码返回的示例JSON响应: 在我的JQuery中,如果我写的话,我将获得的价值。这是我的JQuery代码 在这里,我想读取jsonResponse而不是JQuery中的硬编码。诸如循环遍历响应以获取每个名称和值之类的东西。有什么建议? 问题答案: 重要的是要注意,属性的迭代顺序是任意的,不应依赖。

  • 我想把一些JSON解析成一个SQL的INSERT,但是,由于不同级别的数据片段不同,很难得到所有的数据。 以下是JSON文件: 到目前为止,这就是我所用的Python,它可以工作: 结果是: 这有点对,但我需要插入看起来像: 我看到了一些例子:例1 但我一直没能让它为我工作。 @斯科尔05 我想你的意思是:但它导致了一个错误:AttributeError:'dict'对象没有属性'iteritem

  • 那么,有没有其他方法来获得特定的键:值?

  • 问题内容: 我检查了一些类似的问题,但似乎没有一个合适的答案(或对我来说足够愚蠢)。因此,我有一个非常简单的WebAPI来检查DB中是否存在带有电子邮件的用户。 AJAX: WebAPI: 现在很明显,这是行不通的。Ajax调用工作正常,但是如何将json对象解析为WebAPI以便能够像调用它一样? 编辑 我无法将电子邮件地址作为字符串传递,因为逗号弄乱了路由。 ajax调用工作正常,该对象被发送