Cómo leer el objeto JSON complejo de jQuery en Servlet request.getParameter

Estoy creando y enviando un objeto JSON con jQuery, pero no puedo averiguar cómo analizarlo correctamente en mi servlet Ajax utilizando la biblioteca org.json.simple.

Mi código jQuery es el siguiente:

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

En el servlet, cuando uso request.getParameterNames () y lo imprimo en mi consola, obtengo como nombres de parámetros rooms[0][key] , etc., pero no puedo analizar las salas JSON Array de ninguna manera. He intentado analizar el objeto devuelto por request.getParameter("rooms") o la .getParameterValues("rooms") , pero ambos devuelven un valor nulo.

¿Hay algún problema con la forma en que estoy formateando los datos JSON en jQuery o hay una manera de analizar JSON en el servlet que me estoy perdiendo?

Pida más código, a pesar de que el servlet todavía está bastante vacío, ya que no puedo averiguar cómo analizar los datos.

El argumento de data de $.ajax() toma un objeto JS que representa el mapa de parámetros de solicitud. Por lo tanto, cualquier objeto JS que usted alimente se convertirá en parámetros de solicitud. Ya que le está pasando el objeto JS en un plano simple, se trata como un mapa de parámetros de solicitud. Debe acceder a los parámetros individuales exactamente por su representación de nombre de parámetro de solicitud.

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

Puede encontrarlos todos por el HttpServletRequest#getParameterMap() :

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

Incluso puede recostackr dinámicamente todos los parámetros de la siguiente manera:

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

Si su intención es pasarlo como un objeto JSON real para que pueda usar un analizador JSON para dividirlo en propiedades, debe convertirlo en una String antes de enviarlo utilizando JS / jQuery y especificar el argumento de data siguiente manera :

 data: { "rooms": roomsAsString } 

De esta manera, está disponible como una cadena JSON por request.getParameter("rooms") que a su vez puede analizar utilizando una API JSON arbitraria.


No relacionado con el problema concreto, no use el prefijo $ variable en jQuery para objetos que no sean jQuery. Esto hace que su código sea más confuso para los expertos de JS / jQuery. Úselo solo para objetos jQuery reales, no para cadenas de vainilla o primitivas.

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