从字符串获取JSONObject
很简单:
JSONObject o = new JSONObject(request.getParameter("WHATEVER"));
编辑:由于您使用JSON-lib中,这是
JSONObject o = (JSONObject) JSONSerializer.toJSON(request.getParameter("WHATEVER"));
你。
JSONObject没有任何带String参数的构造函数 您正在使用哪个API? – 2010-08-05 15:36:53
我使用json.org的JSON库。 – 2010-08-06 11:23:20
GSON是一个相当不错的基于Java的JSON库。
GSON很好很好很好lib – 2010-08-05 15:40:20
请参阅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
并使用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 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();
});
});
这个问题与jQuery和JavaScript根本没有关系,这个答案是OT。 – 2015-06-18 20:58:43
好像你必须使用net.sf.json.JSONObject
版本的JSONObject (这是不是json.org版本)。
对于net.sf.json.JSONObject
版本,只需使用
JSONObject.fromObject(Object obj)
其中obj
要么
- 一个有效的JSON格式的字符串
- 一个Bean POJO与getter和setter。
你有没有搜索,阅读,尝试过什么? – BoltClock 2010-08-05 11:13:25
什么'JSONObject'? – Bozho 2010-08-05 11:18:29
@Bozho有一个好点。有很多适用于Java的JSON库,我期望它们中的很多都使用该类名称。 – 2010-08-05 12:50:50