在servlet中,我如何从HttpServletRequest
中获取一个JSONObject
?
非常简单:
JSONObject o = new JSONObject(request.getParameter("WHATEVER"));
编辑:由于您使用json-lib,因此它是
JSONObject o = (JSONObject) JSONSerializer.toJSON(request.getParameter("WHATEVER"));
为您而服务。
看起来你一定在使用 net.sf.json.JSONObject
版本的 JSONObject (这不是json.org的版本)。
对于 net.sf.json.JSONObject
版本,仅需使用:
JSONObject.fromObject(Object obj)
其中 obj
可以是以下两种格式之一:
请参阅JSONObject(java.lang.String
)。如果您传递的是有效的JSON字符串,则会创建一个JSONObject
对象。构造函数会抛出JSONException
异常,因此您需要处理它。如果您发送无效的JSON,则同样适用。
这实际上取决于您正在做什么。在大多数情况下,JSONObject将使用bean getter来创建您的JSON对象(如果您将bean传递给构造函数)。否则,您可以传递一个对象以及一个名称字符串数组。在这里,JSONObject
将使用反射来确定对象的公共成员。然后,它将使用您提供的名称作为此对象的键。
JSONObject
可以轻松处理任何类型为 Map
的对象。但如果您的对象是一个 List
,则需要使用 JSONArray
。另一个问题是,如果您的 Map
包含一个 List
,那么由于某种原因,JSONObject
无法确定它是一个 List
,并且将使用 List
的标准字符串表示形式(这不是您想要的)。唯一处理该问题的方法是迭代 Map
并手动构建 JSONObject
。
至于您的问题,我假设您有一个 servlet,其中包含一个将返回 JSON 的操作。在这种情况下,创建一个新的 JSONObject
,并使用 PrintWriter
和 jsonObject.toString()
输出您的 JSON。
你正在以稍微困难的方式进行操作。肯定有更简单的方法来完成这个任务。只需将其作为普通请求参数发送,而不是作为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表单插件,它会更加透明。
$(document).ready(function() {
$('#form').ajaxForm(function(response) {
alert(response); // "OK"
});
});
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();
});
});
GSON是一个相当不错的基于Java的JSON库。