为什么我的json字符串中有28个不可打印的字符?

时间:2011-10-03 12:51:25

标签: json jsp

我从JSP中的数据库查询生成一个JSON字符串,但它总是有不可打印的字符,我不明白为什么!

生成JSON的JSP如下:

  String user = "username"; // set a username
  String password = "password"; // set a password
  Class.forName("org.firebirdsql.jdbc.FBDriver"); // JDBC for firebird a.k.a. Jaybird
  String DB = "jdbc:firebirdsql://123.123.123.123:3050/C:\\db.fdb";

  JSONArray obj=new JSONArray(); //Creating the json object

    Connection connection = DriverManager.getConnection(DB, user, password);              
    Statement statement = connection.createStatement();

  int i=0;
  Class.forName("org.firebirdsql.jdbc.FBDriver"); // JDBC for firebird a.k.a. Jaybird
  String query = "SELECT ses.sessionid, ses.datetime, ses.guid, ses.staffid FROM session ses ORDER by ses.datetime";
  ResultSet resultset = statement.executeQuery(query);

  while (resultset.next())
    {
    JSONObject j = new JSONObject();
    j.put("SessionID", resultset.getString("sessionid"));
    j.put("DateTime", resultset.getString("datetime"));
    j.put("GUID", resultset.getString("guid"));
    j.put("StaffID", resultset.getString("staffid"));
    obj.add(i, j);
    i++; // Counter for indexing the JSONArray
  }

  resultset.close();
  statement.close();
  connection.close();

这是我在PHP中使用的代码:

    echo '*'.$json.'*<br>';
    echo strlen($json).'<br>';
    $json = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $json);
    echo '*'.$json.'*<br>';
    echo strlen($json).'<br>';

显示:

* [{"SessionID":"850","DateTime":"2011-10-03 14:21:37.0","GUID":"51e71c19-ca13-4053-bd95-2addb5ba69f6","StaffID":"804"}] *
146
*[{"SessionID":"850","DateTime":"2011-10-03 14:21:37.0","GUID":"51e71c19-ca13-4053-bd95-2addb5ba69f6","StaffID":"804"}]*
118

所以28个不可打印的角色有所不同 - 大部分都在开头。他们是如何到达那里的?如何在JSP中摆脱它们?

由于

1 个答案:

答案 0 :(得分:1)

因为JSP是HTTP响应的视图技术的一部分。 <% %>之外的所有内容也会被发送到响应中,包括空格和换行符(右键单击PHP生成的HTML页面,执行查看源代码,您自己也会看到这些换行符,它是那些你称为“不可打印”字符的换行符。

删除<% %>之外的所有空格和换行符,或者更好地使用servlet。您可以在How to use Servlets and Ajax?

的答案中找到一些生成JSON的Servlet的启动示例