无法在请求中获取JSON对象到servlet

时间:2015-08-30 21:04:58

标签: java json servlets

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

Object能够接收但无法再次转换为JSON Object。我正在使用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"
    }
}

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

4 个答案:

答案 0 :(得分:1)

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

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

它应该是:

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

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

答案 1 :(得分:0)

之前我创建了一个JSON String,并使用JSON.parse(json_string)将其解析为JSON Object;

我已将其发送给servlet。 servlet尝试读取它但是因为它将对象作为字符串打印为[对象对象]并且在尝试解析回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”);

抱歉,如果我的英语不好......谢谢

答案 2 :(得分:0)

 String json_Data = "{ .....}"; // your json format data
 JSONParser parser = new JSONParser();
 Object obj = parser.parse(json_Data);
 JSONObject jsonObj = (JSONObject)obj;

这样可以正常测试。

答案 3 :(得分:0)

你看到从请求中获取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.

希望它能帮助别人。!