我想实现一个Web服务,它返回一个简单的数据库从Java应用程序中读取它。JSON问题与java程序
我的服务器正在运行Tomcat 7
这里是一个应该创建我的JSON文件中的代码:
<%@ page pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@page import="org.json.simple.JSONObject"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/png" href="HilevenLogo.png" />
<title>Hileven</title>
</head>
<body>
<%
Class.forName ("org.postgresql.Driver");
Connection cnx = DriverManager.getConnection ("jdbc:postgresql://localhost", "user" , "password");
Statement st = cnx.createStatement();
ResultSet rs = st.executeQuery("SELECT id, description, libelle, ordre, warning FROM commandes ORDER BY ordre");
JSONObject obj=new JSONObject();
while(rs.next()){
obj.put("id", new Integer(rs.getInt("id")));
obj.put("description", rs.getString("description"));
obj.put("libelle", rs.getString("libelle"));
obj.put("ordre", new Integer(rs.getInt("ordre")));
obj.put("warning", new Boolean(rs.getBoolean("warning")));
out.print(obj);
out.flush();
}
rs.close();
cnx.close();
%>
</body>
</html>
我的第一个问题是关于循环。一个JSON文件可以有多个记录吗?因为我的代码显示一个网页,如:
{“公共秩序”:1,“libelle”:“融洽每日新闻”,“说明”:“Envoie联合国关系JOURNALIER德升业务范围都serveur相提并论邮件”,”警告“:false,”id“:1} {”ordre“:2,”libelle“:”Rapport Hebdomadaire“,”description“:”Envoie un rapport hebdomadaire de lactivitédu serveur par mail“,”warning“:false ,“id”:2} {“ordre”:3,“libelle”:“Reboot”,“description”:“Redémarrele serveur”,“warning”:false,“id”:3} {“ordre”:100 ,“libelle”:“Extinction”,“description”:“Eteint le serveur”,“warning”:true,“id”:4}
With 4 {}。可能吗 ?
然后,我有我的阅读类我在这个论坛上有太多:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.nio.charset.Charset;
import org.json.JSONException;
import org.json.JSONObject;
public class JsonReader {
private static String readAll(Reader rd) throws IOException {
StringBuilder sb = new StringBuilder();
int cp;
while ((cp = rd.read()) != -1) {
sb.append((char) cp);
}
return sb.toString();
}
public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException {
InputStream is = new URL(url).openStream();
try {
BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
String jsonText = readAll(rd);
System.out.println(jsonText);
JSONObject json = new JSONObject(jsonText);
return json;
} finally {
is.close();
}
}
public static void main(String[] args) throws IOException, JSONException {
JSONObject json = readJsonFromUrl("http://www.hileven.com/admin");
System.out.println(json.toString());
System.out.println(json.get("id"));
}
}
我有这样的错误:在线程“主要” org.json.JSONException
例外:一个JSONObject文本必须用 '{' 开始在字符6
在该行:
JSONObject json = new JSONObject(jsonText);
所以我增加了一个的System.out.println(jsonText)仅此行之前,它返回我的整个页面的HTML代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/png" href="HilevenLogo.png" />
<title>Hileven</title>
</head>
<body>
{"ordre":1,"libelle":"Rapport Quotidien","description":"Envoie un rapport journalier de l activité du serveur par mail","warning":false,"id":1}{"ordre":2,"libelle":"Rapport Hebdomadaire","description":"Envoie un rapport hebdomadaire de l activité du serveur par mail","warning":false,"id":2}{"ordre":3,"libelle":"Reboot","description":"Redémarre le serveur","warning":false,"id":3}{"ordre":100,"libelle":"Extinction","description":"Eteint le serveur","warning":true,"id":4}
</body>
</html>
它是正常的吗?我认为我的JSON网络服务配置不好。当我们尝试转到URL而不是打印所有JSON内容时,是否不必开始下载JSON文件?
如何让我的JSP只返回JSON部分,甚至如何让我的Java程序只读取JSON部分而不是所有的html代码?
好的我在脚本的开头添加了“<%@ page trimDirectiveWhitespaces =”true“%>”,我找到了一个解决方案。感谢您的关注 ! –