java - 解析 - jsonobject list 変換




文字列からJSONObjectを取得する (4)

GSONはかなり優れたJavaベースのJSONライブラリです。

サーブレットでHttpServletRequestからJSONObjectを取得する方法はありますか。


JSONObjectのnet.sf.json.JSONObjectバージョンを使用する必要があるようです(これは net.sf.json.JSONObjectバージョンではありません )。

net.sf.json.JSONObjectバージョンの場合は単純に

JSONObject.fromObject(Object obj)

objはどちらかです。

  • 有効なJSON形式の文字列
  • ゲッターとセッターを持つBean POJO。

あなたはそれを少し難しい方法でやっています。 もっと簡単な方法があります。 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>

そして、 /register/* url-patternをリッスンするサーブレットは次のようになります。

@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フォームプラグインを使うと、より透明になります。

            $(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();
            });        
        });

とても簡単

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

編集:あなたはjson - libを使用しているので、それは

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

あなたのために。





servlets