打印 json 对象时出现意外的令牌 L 使用高级休息 chrome

Posted

技术标签:

【中文标题】打印 json 对象时出现意外的令牌 L 使用高级休息 chrome【英文标题】:Unexpected Token L when printing a json object Using advanced rest chrome 【发布时间】:2014-01-04 02:56:53 【问题描述】:

我正在使用连接到数据库并打印出您是否登录的 servlet,当使用 printWriter.write(JsonObject) 时,我在 rest Unexpected Token L 中得到错误。我正在使用 tomcat 服务器来托管数据.

public class Login extends HttpServlet 
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost/employeedatabase";
   //  Database credentials
   static final String USER = "root";
   static final String PASS = "admin";
   static Connection conn = null;
   static Statement stmt = null;
   static ResultSet rs;
   static PrintWriter out;
private static final long serialVersionUID = 1L;

/**
 * @see HttpServlet#HttpServlet()
 */
public Login() 
    super();


/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 


/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    response.setContentType("application/json; charset=UTF-8");
    out = response.getWriter();
    String email = request.getParameter("username");
    String password = request.getParameter("password");
    String result = "";

    if(Validation.validateNull(email) && Validation.validateNull(password))
    if(!Validation.validateEmail(email))
    

        result = "Invalid email";
    
    if(databaseFuctions.Login(email,password))
    

        result = "Login accepted";
        try 
            Class.forName("com.mysql.jdbc.Driver").newInstance();
             conn = DriverManager.getConnection(DB_URL, USER, PASS);
            stmt = conn.createStatement();
            getFromDatabase("manager",email,request,response);
        //  getFromDatabase("qa",email,request,response);
        //  getFromDatabase("developer",email,request,response);
         catch (Exception e1) 
            // TODO Auto-generated catch block
         System.out.println(e1.getMessage());
        

    
    else if(!databaseFuctions.Login(email, password))
    
        result = "Login invalid";
    
    else
        result = "No login/password entered";
    
    out.write(result);



public static void getFromDatabase(String table,String email,HttpServletRequest request, HttpServletResponse response)
    JSONObject JObject = new JSONObject();

    ResultSet ds;
    try 

        ds = stmt.executeQuery("SELECT * from "+table+" where email = '"+email+"'");
        while(ds.next()) 
        
            int id = ds.getInt("id");
            int salary = ds.getInt("salary");
            String name = ds.getString("name");
            String role = ds.getString("role");
            String emailAddress = ds.getString("email");
            String phone = ds.getString("phone");
            JObject.put("id", id);
            JObject.put("salary", salary);
            JObject.put("name", name);
            JObject.put("role", role);
            JObject.put("email", emailAddress);
            JObject.put("phone", phone);

        


    catch (Exception e)
    
        System.out.println(e.getMessage());
    

    out.print(JObject.toString());
    out.flush();
    System.out.println(JObject.toString());

在系统中打印时,我得到了所有正确的数据,或者检查了其余的原始数据,我得到了正确的数据。但我不太明白为什么打印机抛出异常任何帮助都很棒

【问题讨论】:

Servlet 中的可变和共享 static 字段是一个很大的禁忌。 另外,请显示完整的堆栈跟踪。 java端没有错误,查看信息时来自其他客户端,java保存的原始数据工作正常,我可以sysout并获取信息。当实际打印时,即 out.print 就是当 rest 在 json 数据中出现 Unexpected 令牌 L 时。但原始数据是正确的信息。 【参考方案1】:

好的,如果错误出现在客户端是因为您正在返回格式错误的 JSON 值,因此您正在返回类似的内容: id: 13, name: "Name"Login invalid 那么 L 的第一个字符对于 JSON 语法无效。 这是因为您在响应中写入来自方法 getFromDatabase out.print(JObject.toString()); 的 json 字符串,并且在方法调用之后您将字符串 result = "Login invalid"; out.write(result); 添加到响应中,这会导致您的 JSON 无效。

解决此问题的一种方法是从方法 getFromDatabase 返回 JSONObject,并将结果方法添加到此对象JObject.put("result", result) 并将对象写入响应。

【讨论】:

感谢您的回答,我现在觉得很愚蠢,因为这很容易解决! 不客气,我过去也遇到过类似的问题,这是我们学习的方式。

以上是关于打印 json 对象时出现意外的令牌 L 使用高级休息 chrome的主要内容,如果未能解决你的问题,请参考以下文章

使用导入类型时出现意外令牌

无法解析错误:伊斯坦布尔“导入”时出现意外令牌

使用 Jest 测试 Angular 时出现“意外的令牌导入”

尝试使用 webpack 和 babel 加载 css 时出现意外令牌

SyntaxError:在 Heroku 上托管 Discord 机器人时出现意外的令牌 '??='

Groovy:使用 Grails 和 Spring 安全核心插件时出现意外令牌