【问题标题】:Unable to get JSON Object in request to the servlet无法在对 servlet 的请求中获取 JSON 对象
【发布时间】:2015-11-24 21:24:02
【问题描述】:

我已经使用从 java 脚本中获得的数据手动创建了一个 JSON 对象,并使用 Ajax 将 JSON 对象发送到一个 servlet。

对象可以接收但无法再次转换为 JSON 对象。我正在使用 json-simple-1.1.jar 。

我试过了

JSONObject json=(JSONObject)new JSONParser().parse("json_data");

但以以下错误结束

Aug 31, 2015 2:28:13 AM source.main.UpdateDetails doGet
SEVERE: null
Unexpected character (j) at position 0.
    at org.json.simple.parser.Yylex.yylex(Yylex.java:610)
    at org.json.simple.parser.JSONParser.nextToken(JSONParser.java:269)
    at org.json.simple.parser.JSONParser.parse(JSONParser.java:118)
    at org.json.simple.parser.JSONParser.parse(JSONParser.java:81)
    at org.json.simple.parser.JSONParser.parse(JSONParser.java:75)
    at source.main.UpdateDetails.processRequest(UpdateDetails.java:55)
    at source.main.UpdateDetails.doGet(UpdateDetails.java:107)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)

作为请求发送的 JSON 文件的输出如下:

{   
    "0":
    {
    "card_name":"Pallela.Manga",
    "aadhar_eid":"1046106160065750110728131521",
    "aadhar_uid":"693228374919",
    "relation":"SELF",
    "age":"43"
    },
    "1":
    {
    "card_name":"KondaBabu",
    "aadhar_eid":"1046106160008020110728125714",
    "aadhar_uid":"996251988555",
    "relation":"HUSBAND",
    "age":"47"
    },
    "2":
    {
    "card_name":"SrinivasaRao",
    "aadhar_eid":"1046106125348220110728131743",
    "aadhar_uid":"609986909901",
    "relation":"SON","age":"25"
    },
    "3":
    {
    "card_name":"Ganesh",
    "aadhar_eid":"1046106160002957110728132026",
    "aadhar_uid":"603873912563",
    "relation":"SON",
    "age":"23"
    }
}

请帮我解决这个问题..谢谢

【问题讨论】:

    标签: java json servlets


    【解决方案1】:

    您看到从请求中获取 json 对象的唯一方法是从缓冲区读取器读取行,然后将其附加到字符串生成器。然后你得到完整的 json 对象请求。然后,您可以使用 getJsonobject 或 getString 解析该 json 对象。我刚刚实现了相同的。您可以查看以下内容:

    response.setContentType("application/json");
             //Gson gson = new Gson();
             StringBuilder sb = new StringBuilder();
                String s;
                while ((s = request.getReader().readLine()) != null) {
                    sb.append(s);
                }
            System.out.println(sb.toString());//got the full request as string. 
                JSONObject requestObj = new JSONObject(sb.toString());
            JSONObject reqjson=requestObj.getJSONObject("Request");
    
            JSONObject auJsonObject=reqjson.getJSONObject("Verification");
            JSONObject getopobj=reqjson.getJSONObject("GetAllOperators");
            String userid=auJsonObject.getString("username");
            String  pass=auJsonObject.getString("password");
            String service_type=getopobj.getString("type");
    

    然后使用这些值我以 json 格式发送一些响应。

    out.println(obj);//obj is my jsonobject for response.
    

    希望对其他人有所帮助!

    【讨论】:

    • 请不要在没有提出更好答案的情况下投反对票,因为这可能会误导其他人。
    【解决方案2】:
     String json_Data = "{ .....}"; // your json format data
     JSONParser parser = new JSONParser();
     Object obj = parser.parse(json_Data);
     JSONObject jsonObj = (JSONObject)obj;
    

    这很好,请测试。

    【讨论】:

    • 如果你仍然在位置 0 得到 Unexpected character (j) 这意味着问题出在你的 json_Data 字符串中。
    【解决方案3】:

    之前我创建了一个 JSON 字符串并使用 JSON.parse(json_string); 将其解析为 JSON 对象;

    我已将其发送到 servlet。 servlet 试图读取它,但由于它以字符串形式获取对象,因此它正在打印为 [object object] 并且在尝试解析回 JSON 字符串时给出上述错误

    最后我从另一篇相关文章的 stackoverflow 获得了帮助 How to read json sent by ajax in servlet

    我使用以下内容从 json 中创建了一个字符串并发送到 servlet。

    JSON.stringify(JSONobj)

    servlet 接收到字符串并使用成功创建 JSON 对象

    JSONObject json = (JSONObject) new JSONParser().parse("json_data");

    对不起,如果我的英语不好...谢谢

    【讨论】:

      【解决方案4】:

      您将文字 String 传递给函数,而不是实际数据:

      JSONObject json = (JSONObject) new JSONParser().parse("json_data");
      //                                                    ^^^^^^^^^^^
      

      应该是:

      JSONObject json = (JSONObject) new JSONParser().parse(json_data);
      

      假设json_data 是一个包含String json 数据的变量

      【讨论】:

      • 哦对不起..!实际上,我将请求参数传递给变量 json_data 并将字符串传递给 JSON 方法。但我仍然遇到错误.. code SEVERE: null 位置 1 处的意外字符 (o)。在 org.json.simple 的 org.json.simple.parser.Yylex.yylex(Yylex.java:610) 处。 parser.JSONParser.nextToken(JSONParser.java:269) 在 org.json.simple.parser.JSONParser.parse(JSONParser.java:118) 在 org.json.simple.parser.JSONParser.parse(JSONParser.java:81)在 org.json.simple.parser.JSONParser.parse(JSONParser.java:75) code
      猜你喜欢
      • 1970-01-01
      • 2019-03-12
      • 1970-01-01
      • 2012-03-26
      • 2012-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多