2010-08-05 269 views
12

如何从servlet中的HttpServletRequest获得JSONObject从字符串获取JSONObject

+2

你有没有搜索,阅读,尝试过什么? – BoltClock 2010-08-05 11:13:25

+5

什么'JSONObject'? – Bozho 2010-08-05 11:18:29

+0

@Bozho有一个好点。有很多适用于Java的JSON库,我期望它们中的很多都使用该类名称。 – 2010-08-05 12:50:50

回答

17

很简单:

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

编辑:由于您使用JSON-lib中,这是

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

你。

+3

JSONObject没有任何带String参数的构造函数 您正在使用哪个API? – 2010-08-05 15:36:53

+0

我使用json.org的JSON库。 – 2010-08-06 11:23:20

0

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

+0

GSON很好很好很好lib – 2010-08-05 15:40:20

1

请参阅JSONObject(java.lang.String)。这将创建一个JSONObject对象,如果您传递的是有效的JSON字符串。构造函数抛出一个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。

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> 

在此可以侦听/register/*url-pattern servlet的怎么能是这样的:

@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" 
       });   
      }); 

为了应对来自servlet的回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(); 
      });   
     }); 
+1

这个问题与jQuery和JavaScript根本没有关系,这个答案是OT。 – 2015-06-18 20:58:43

2

好像你必须使用net.sf.json.JSONObject版本的JSONObject (这是不是json.org版本)。

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

JSONObject.fromObject(Object obj) 

其中obj要么

  • 一个有效的JSON格式的字符串
  • 一个Bean POJO与getter和setter。