Подтвердить что ты не робот

Получение JSONObject из String

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

4b9b3361

Ответ 1

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

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

Изменить: поскольку вы используете json-lib, это

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

для вас.

Ответ 2

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

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

JSONObject.fromObject(Object obj)

где obj либо

  • действительная строка в формате JSON
  • a Bean POJO с геттерами и сеттерами.

Ответ 3

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

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

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

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

Ответ 4

GSON - довольно хорошая Java-библиотека JSON.

Ответ 5

Ты делаешь это немного сложно. Конечно, это более простой способ сделать это. Просто отправьте как обычные параметры запроса, а не как 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();
            });        
        });