我在尝试从JSON提取值时遇到了一些问题。这里是JSON从我的servlet返回:提取JSON值
[
{
"eventDesc":"My sons 5th year birthday party",
"eventDate":"12/11/2014",
"eventID":"1",
"eventName":"Birthday party",
"eventTime":"17:00",
"eventX":"41803.2",
"eventY":"38210.8",
"eventBy":"Gabriel"
},
{
"eventDesc":"Steamboat Gathering",
"eventDate":"20/11/2014",
"eventID":"2",
"eventName":"Gathering",
"eventTime":"19:00",
"eventX":"41551.6",
"eventY":"38211.7",
"eventBy":"JunHong"
}
]
而且我不知道我应该怎么提取它每条记录的记录,因为我有每个记录绘制到地图上。
我有这些代码提取从JSON在servlet返回:
public void getThemesOnMap() throws JSONException{
String page;
BufferedReader in;
JSONArray jsonArray;
try{
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet("http://localhost:8080/MyProject/MyServlet");
HttpResponse response = client.execute(request);
in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer sb = new StringBuffer("");
String line = "";
String NL = System.getProperty("line.separator");
while((line = in.readLine()) != null){
sb.append(line + NL);
}
in.close();
page = sb.toString();
System.out.println(page);
try{
JSONObject jsonObject = new JSONObject(page);
jsonArray = jsonObject.getJSONArray(page);
int length = jsonArray.length();
for(int i = 1; i < length; i++){
JSONObject attribute = jsonArray.getJSONObject(i);
String eventName = attribute.getString("eventName");
String eventX = attribute.getString("eventX");
String eventY = attribute.getString("eventY");
PictureMarkerSymbol graphicIcon;
graphicIcon = new PictureMarkerSymbol(this.getResources().getDrawable(R.drawable.busstopicon));
Point p = new Point(Double.parseDouble(eventX), Double.parseDouble(eventY));
Symbol symbol = graphicIcon;
HashMap<String, Object> attrMap = new HashMap<String, Object>();
attrMap.put("eventName", eventName);
graphicsLayer.addGraphic(new Graphic(p, symbol, attrMap));
}
}
catch(JSONException e){
e.printStackTrace();
}
}
catch(IOException e){
e.printStackTrace();
}
}
但它不会绘制任何东西到地图上。有任何想法吗?
在此先感谢。
编辑
我怎么能格式化我的JSON作为返回:
{Events:[
{
"eventDesc":"My sons 5th year birthday party",
"eventDate":"12/11/2014",
"eventID":"1",
"eventName":"Birthday party",
"eventTime":"17:00",
"eventX":"41803.2",
"eventY":"38210.8",
"eventBy":"Gabriel"
},
{
"eventDesc":"Steamboat Gathering",
"eventDate":"20/11/2014",
"eventID":"2",
"eventName":"Gathering",
"eventTime":"19:00",
"eventX":"41551.6",
"eventY":"38211.7",
"eventBy":"JunHong"
}]
}
这是我的servlet方法从数据库中检索数据:
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
if(request.getParameter("SQL1")!=null){
}
JSONArray jsonArray = new JSONArray();
PrintWriter out = response.getWriter();
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost/mydb", "root", "root");
PreparedStatement statement = con
.prepareStatement("SELECT * FROM event");
ResultSet result = statement.executeQuery();
while (result.next()) {
JSONObject eventInfo = new JSONObject();
eventInfo.put("eventID", result.getString("eventID"));
eventInfo.put("eventName", result.getString("eventName"));
eventInfo.put("eventDesc", result.getString("eventDesc"));
eventInfo.put("eventDate", result.getString("eventDate"));
eventInfo.put("eventTime", result.getString("eventTime"));
eventInfo.put("eventX", result.getString("eventX"));
eventInfo.put("eventY", result.getString("eventY"));
eventInfo.put("eventBy", result.getString("eventBy"));
jsonArray.put(eventInfo);
}
}
catch (JSONException je) {
System.out.println(je.getMessage());
} catch (Exception exc) {
System.out.println(exc.getMessage());
}
out.println(jsonArray.toString());
}
您是否考虑过使用JSON解析器? – 2014-11-04 00:36:17
让我再次更新我的问题。给我5分钟:) – 2014-11-04 00:37:29
首先转到json.org并研究JSON语法。学习只需要5-10分钟。然后理解JSON“对象”映射到Java地图和JSON“数组”映射到Java列表。 JSON解析器会将数据解析为地图和列表的“嵌套”以匹配原始JSON的结构。 (并且,如果您将JSON字符串粘贴到联机JSON解析器/格式化程序(如http://json.parser.online.fr/)中,则它将以更易于阅读的格式良好的样式显示。) – 2014-11-04 01:04:28