从String获取JSONObject

时间:2010-08-05 11:10:52

标签: java jquery json jsp servlets

如何从servlet中的JSONObject获取HttpServletRequest

5 个答案:

答案 0 :(得分:17)

很简单:

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

编辑:因为你使用json-lib,所以

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

给你。

答案 1 :(得分:2)

您似乎必须使用net.sf.json.JSONObject版本的JSONObject (这不是json.org版本)。

对于net.sf.json.JSONObject版本,只需使用

即可
JSONObject.fromObject(Object obj)

其中obj

  • 有效的JSON格式字符串
  • 带有吸气剂和制定者的Bean POJO。

答案 2 :(得分:1)

JSONObject(java.lang.String)。如果您传入的是有效JSON的String,这将创建一个JSONObject对象。构造函数抛出JSONException,因此您必须处理它。如果您发送无效的JSON,也是如此。

这实际上取决于你在做什么。在大多数情况下,JSONObject将使用bean getter来创建JSON对象(如果将bean传递给构造函数)。否则,您可以传递一个对象以及一个String数组名称。在这里,JSONObject将使用反射来找出对象的公共成员。然后,它将使用您提供的名称作为此对象的键。

JSONObject会毫无问题地处理Map类型的任何内容。但如果您的对象是List,则需要使用JSONArray。另一个问题是,如果您的Map包含List。然后,出于某种原因,JSONObject无法确定它是List并且将使用List的标准字符串表示(不是您想要的)。处理这种情况的唯一方法是迭代Map并手动构建JSONObject

就你的问题而言,我假设你有一个servlet,它有一个返回JSON的动作。在这种情况下,请创建一个新JSONObject并使用PrintWriterjsonObject.toString()输出您的JSON。

答案 3 :(得分:0)

GSON是一个相当不错的基于Java的JSON库。

答案 4 :(得分:0)

你正在做一些艰难的方式。肯定有一种更简单的方法可以做到这一点。只需发送正常的请求参数,而不是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的{​​{1}}的servlet的样子:

/register/*

使用jQuery form插件,它会更透明。

@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.
}

要从servlet回复到jQuery,如果你返回真正的JSON数据会更容易。例如:

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

然后在jQuery中:

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.