Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从字符串获取JSONObject_Java_Jquery_Json_Jsp_Servlets - Fatal编程技术网

Java 从字符串获取JSONObject

Java 从字符串获取JSONObject,java,jquery,json,jsp,servlets,Java,Jquery,Json,Jsp,Servlets,如何从servlet中的HttpServletRequest获取JSONObject JSONObject o = new JSONObject(request.getParameter("WHATEVER")); 编辑:因为您使用json库,所以 JSONObject o = (JSONObject) JSONSerializer.toJSON(request.getParameter("WHATEVER")); 适合您。GSON是一个相当不错的基于Java的JSON库 见。如果您传入

如何从servlet中的
HttpServletRequest
获取
JSONObject

JSONObject o = new JSONObject(request.getParameter("WHATEVER"));
编辑:因为您使用json库,所以

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

适合您。

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

见。如果您传入的字符串是有效的JSON,这将创建一个
JSONObject
对象。构造函数抛出一个
JSONException
,因此您必须处理它。如果您发送的是无效的JSON,也可以这样做

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

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

至于你的问题,我假设你有一个servlet,它有一个返回JSON的操作。在这种情况下,创建一个新的
JSONObject
,并使用
PrintWriter
JSONObject.toString()
来输出JSON。

你做得有点辛苦。当然有一种更简单的方法。只需作为普通请求参数发送,而不是JSON。可以使用收集所有表单字段作为参数。下面是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>
@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.
}
有了这个插件,它将更加透明

            $(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.

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

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

JSONObject.fromObject(Object obj)
其中,
obj

  • 有效的JSON格式字符串
  • 带有getter和setter的Bean POJO

你搜索、阅读、尝试过什么吗?@Bozho说得很有道理。Java有很多JSON库,我希望它们中的很多都使用这个类名。如果有疑问,请假设JSON.orgJSONObject中的引用JSON库没有任何带字符串参数的构造函数,您使用的是哪个API??我使用的是JSON.org中的JSON库。这个问题与jQuery或JavaScript完全无关,这个答案是正确的。
JSONObject.fromObject(Object obj)