> Javascript > Ext JS权威指南 1.2.6 在Java中使用JSON 2013-01-30 08:59:01 我要投稿
本文所属图书 > Ext JS权威指南
本书有两大特点:第一,授人以鱼,根据Ext JS的构成体系全面系统地讲解了其开发方法与技巧,每个知识点都辅之以翔实的案例,同时包含大量最佳实践,适合系统学习和开发参考;第二,授人以渔,宏观上对Ext JS的... 立即去当当网订购
1. Gson概述
Gson是谷歌的一个开源项目,其作用是在Java对象和JSON之间实现相互转换。大家可登录下载最新版本,本书使用的版本是1.6版,本节的示例都将使用该版本。
Gson的功能很多,这里囿于篇幅就不一一介绍了。本节的重点是讲述如何使用Gson生成Ext JS格式的返回数据。
2. 配置Gson
要使用Gson,将gson-1.6.jar文件复制到项目的“lib”目录就行了。譬如在动态Web项目中使用Gson,将文件复制到“\WebContent\WEB-INF\”下的lib目录即可。
要引用Gson,需在引用文件中加入以下代码:
import com.google.gson.*;
你也可以根据需要细化引用。
3. 使用Gson
要生成1.2.5节中介绍的JSON格式数据,需要使用JsonObject和JsonArray两个对象,这两个对象的详细说明如表1-2所示。
表1-2 JsonObject与JsonArray的详细说明
对 象 说 明
JObject 生成一个JSON对象,形象点来说就是生成“{}”
JArray 生成一个JSON数组,形象点来说就是生成“[]”
这两个对象是如何使用的,请看下面的代码:
String connectionUrl = "jdbc:sqlserver://192.168.0.254:1433;" +
"databaseName=Northwind;;user=sa;password=abcd-1234";
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try {
//使用JDBC从数据库获取数据Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = DriverManager.getConnection(connectionUrl);
String SQL = "SELECT CustomerID,CompanyName,ContactName " +
"FROM Customers order by CompanyName";
stmt = con.createStatement();
rs = stmt.executeQuery(SQL);
int count = 0; //计算记录总数
//构建数据列表
JsonArray array=new JsonArray();
while (rs.next()) {
//构建每行数据对象
JsonObject obj= new JsonObject();
obj.addProperty("id", rs.getString("CustomerID"));
obj.addProperty("cpname", rs.getString("CompanyName"));
obj.addProperty("contactName", rs.getString("ContactName"));
array.add(obj);
count++;
}
//构建返回格式数据
JsonObject json=new JsonObject();
json.addProperty("totals", count);
json.add("rows", array);
response.getWriter().write(json.toString());
rs.close();
}
catch (Exception e) {
response.getWriter().write(e.getMessage());
}
finally {
if (rs != null) try { rs.close(); } catch(Exception e) {}
if (stmt != null) try { stmt.close(); } catch(Exception e) {}
if (con != null) try { con.close(); } catch(Exception e) {}
}
代码中,注释“构建数据列表”之前的代码是实现数据库查询数据的,而我们的重点是JSON,所以我们的关注点是注释下面的代码。因为Gson不支持LINQ to JSON,所以我们必须一步步地构建JOSN数据。
首先创建一个JsonArray对象,准备在循环中插入数据。在while循环中,每行数据就是一个JsonObject对象,因而要创建新的JsonObject对象,然后使用addProperty方法将每列数据添加到JsonObject对象中,最后是将这个JsonObject对象使用JsonArray的add方法添加到数组中。这样,要返回的数据列表就构建完成了。
最后一步就是构建最外层的JsonObject对象,这个步骤比较简单。首先是使用addProperty方法添加记录总数,然后使用add方法将JsonArray对象作为“rows”的值添加到JsonObject对象中,最后使用toString方法转换成字符串返回客户端。在这里要注意JsonObject对象的addProperty方法和add方法的区别,addProperty方法是用来添加原生数据类型的,而add方法是用来添加JsonElement(包括JsonObject、JsonArray、JsonPrimitive和JsonNull)对象的,详细的说明可阅读Gson的API。
4. 处理客户端提交的JSON数据
在Java中要处理1.2.5节中介绍的JSON数据,可使用JsonParser对象的Parse方法,具体代码如下:
response.setContentType("text/html; charset=utf-8");
String josnStr = "[" +
"{id:'12345',title:'文章一',author:'李四'},"+
"{id:'12367',author:'张三'},"+
"{id:'17777',isShow:true}"+
"]";
String tplString ="<tr><td>%1$s</td><td>%2$s</td><td>%3$s</td></tr>";
response.getWriter().write("<table border='1'>"+
"<tr><td width='80'>ID</td><td width='100'>字段</td><td width= '100'>值</td></tr>"
);
JsonParser jparser = new JsonParser();
JsonArray ja = jparser.parse(josnStr).getAsJsonArray();
for (JsonElement je : ja) {
JsonObject jo = je.getAsJsonObject();
Set<Map.Entry<String, JsonElement>> jset= je.getAsJsonObject().entrySet();
String id = jo.get("id").getAsString();
for (Map.Entry<String, JsonElement> map : jset) {
String key =map.getKey();
if(key !="id"){
response.getWriter().write(
String.format(tplString, id,key,map.getValue())
);
}
}
}
response.getWriter().write("</table>");