Получение JSONObject из String - PullRequest
13 голосов
/ 05 августа 2010

Как я могу получить JSONObject из HttpServletRequest в сервлетах?

Ответы [ 5 ]

17 голосов
/ 05 августа 2010

Очень просто:

JSONObject o = new JSONObject(request.getParameter("WHATEVER"));

Редактировать: Поскольку вы используете json-lib, для вас это

JSONObject o = (JSONObject) JSONSerializer.toJSON(request.getParameter("WHATEVER"));  

.

2 голосов
/ 11 января 2012

Похоже, вы используете net.sf.json.JSONObject версию JSONObject (это не версия json.org ).

Для версии net.sf.json.JSONObject просто используйте

JSONObject.fromObject(Object obj)

, где obj - это либо

  • допустимая строка в формате JSON
  • POJO-компонент Bean с методами получения и установки.
1 голос
/ 05 августа 2010

См. JSONObject(java.lang.String) .Это создаст объект JSONObject, если вы передадите строку, которая является допустимым JSON.Конструктор выдает JSONException, поэтому вам придется с этим справиться.Это также хорошо, если вы отправляете неверный JSON.

Это действительно зависит от того, что вы делаете.По большей части JSONObject будет использовать средства получения bean-компонентов для создания вашего объекта JSON (если вы передадите bean-компонент в конструктор).В противном случае вы можете передать объект вместе с массивом имен String.Здесь JSONObject будет использовать отражение для определения открытых членов объекта.Затем он будет использовать имена, которые вы указали в качестве ключей к этому объекту.

JSONObject без проблем обработает что-либо типа Map.Но если ваш объект List, вам нужно использовать JSONArray.Другая проблема, если ваш Map содержит List.Тогда по какой-то причине JSONObject не может понять, что это List и будет использовать стандартное строковое представление List (не то, что вы хотите).Единственный способ справиться с этим - перебрать Map и построить JSONObject вручную.

Что касается вашего вопроса, я предполагаю, что у вас есть сервлет с действием, которое будет возвращать JSON.В этом случае создайте новый JSONObject и используйте PrintWriter to и jsonObject.toString() для вывода JSON.

0 голосов
/ 06 августа 2010

Вы делаете это немного сложным путем . Конечно, есть более простой способ сделать это. Просто отправьте как обычные параметры запроса, а не как JSON. Вы можете использовать jQuery.serialize(), чтобы собрать все поля формы в качестве параметров. Вот пример того, как должна выглядеть JSP:

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>Test</title>
        <script src="http://code.jquery.com/jquery-latest.min.js"></script>
        <script>
            $(document).ready(function() {
                $('#form').submit(function() {
                    $form = $(this);
                    $.post($form.attr('action'), $form.serialize(), function(response) {
                        alert(response); // "OK"
                    });
                    return false;
                });        
            });
        </script>
    </head>
    <body>
        <form id="form" action="register" method="post">
            <input type="text" name="username">
            <input type="password" name="password">
            <input type="submit">
        </form>
    </body>
</html>

А вот как может выглядеть сервлет, который прослушивает url-pattern из /register/*:

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    System.out.println(username + "," + password);
    response.getWriter().write("OK"); // You can write JSON string here.
}

С помощью плагина jQuery form он станет более прозрачным.

            $(document).ready(function() {
                $('#form').ajaxForm(function(response) {
                    alert(response); // "OK" 
                });        
            });

Чтобы ответить от сервлета на jQuery, проще, если вы возвращаете реальные данные JSON. Например:

Map<String, Object> data = new HashMap<String, Object>();
if (userDAO.exist(username)) {
    data.put("success", false);
    data.put("message", "Username in use, please choose another");
} else {
    userDAO.create(username, password);
    data.put("success", true);
    data.put("message", "User successfully registered");
}
response.setContentType("application/json");
response.getWriter().write(new Gson().toJson(data)); // Gson = Google Gson.

и затем в jQuery:

        $(document).ready(function() {
            $('#form').ajaxForm(function(data) {
                $('#message').addClass(data.success ? 'success' : 'error').text(data.message).show();
            });        
        });
0 голосов
/ 05 августа 2010

GSON - неплохая библиотека JSON на основе Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...