我从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中摆脱它们?
由于
答案 0 :(得分:1)
因为JSP是HTTP响应的视图技术的一部分。 <% %>
之外的所有内容也会被发送到响应中,包括空格和换行符(右键单击PHP生成的HTML页面,执行查看源代码,您自己也会看到这些换行符,它是那些你称为“不可打印”字符的换行符。
删除<% %>
之外的所有空格和换行符,或者更好地使用servlet。您可以在How to use Servlets and Ajax?