JSON

1.2.6 在Java中使用JSON

字号+ 作者:H5之家 来源:H5之家 2015-10-08 10:22 我要评论( )

1. Gson概述Gson是谷歌的一个开源项目,其作用是在Java对象和JSON之间实现相互转换。大家可登录http://code.google.com/p/google-gson/下载最新版本,本书使用的

> 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>");

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评