2012-07-02 3 views
1

Я создаю и отправляю объект JSON с помощью jQuery, но я не могу понять, как правильно его разобрать в моем сервлете Ajax, используя библиотеку org.json.simple.Как читать сложный объект JSON из jQuery в Servlet request.getParameter

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

В сервлета, когда я использую request.getParameterNames() и распечатать его на моей консоли я получаю в качестве имен параметров rooms[0][key] Etcetera, но я не могу разобрать полученные Комнаты JSON Array в любом случае. Я попытался разобрать объект, возвращенный request.getParameter("rooms") или .getParameterValues("rooms"), но оба они возвращают нулевое значение.

Есть ли что-то не так в том, как я форматирую данные JSON в jQuery или есть способ разобрать JSON в сервлете, который мне не хватает?

Запросите больше кода, хотя сервлет по-прежнему довольно пуст, так как я не могу понять, как разбирать данные.

ответ

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

Вы можете даже динамически собрать все Params следующим образом:

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.


Unrelated к конкретной проблеме, не используйте $ переменного префикса в JQuery для объектов, не JQuery. Это делает ваш код более запутанным для экспертов JS/jQuery. Используйте его только для реальных объектов jQuery, а не для простых ванильных строк или примитивов.

var $foo = "foo"; // Don't do that. Use var foo instead. 
var $foo = $("someselector"); // Okay. 
Смежные вопросы