一、什么是Google-Gson?
:Gson这个Java类库可以把Java对象转换成JSON,也可以把JSON字符串转换成一个相等的Java对象。
Gson支持任意复杂Java对象包括没有源代码的对象。它的比struts2提供的json插件的操作更加简单明了。
二 、使用Google-Gson需要什么配置?
:我们需要下载Gson.jar将它放入web项目的lib包中
三、方法简介。
:Googe-Gson提供了两种重要的方法
1.toJson(); //将一个对象转换成JSON对象
2.fromJson();//将一个JSON对象转换成一个对象
//对于这两个方法有很多的重载方法
四、具体实例:
- JavaBean:
- package org.viancent.domain;
- import java.util.Date;
- import org.apache.struts2.json.annotations.JSON;
- public class Person {
- private int pid;
- private String pname;
- private int page;
- private String address;
- private Date date;
- public Date getDate() {
- return date;
- }
- public void setDate(Date date) {
- this.date = date;
- }
- public int getPid() {
- return pid;
- }
- public void setPid(int pid) {
- this.pid = pid;
- }
- public String getPname() {
- return pname;
- }
- public void setPname(String pname) {
- this.pname = pname;
- }
- public int getPage() {
- return page;
- }
- public void setPage(int page) {
- this.page = page;
- }
- public String getAddress() {
- return address;
- }
- public void setAddress(String address) {
- this.address = address;
- }
- }
Action:
- package org.viancent.action;
- import java.io.PrintWriter;
- import java.lang.reflect.Type;
- import java.util.ArrayList;
- import java.util.List;
- import javax.servlet.http.HttpServletResponse;
- import javax.xml.crypto.Data;
- import org.apache.struts2.ServletActionContext;
- import org.apache.taglibs.standard.lang.jstl.parser.Token;
- import org.viancent.domain.Person;
- import com.google.gson.Gson;
- import com.google.gson.reflect.TypeToken;
- import com.opensymphony.xwork2.ActionSupport;
- public class GetGsonAction extends ActionSupport {
- private String Gson; //这里是为了获取界面传过来的JSON文本
- public String getGson() {
- return Gson;
- }
- public void setGson(String gson) {
- Gson = gson;
- }
- @Override
- public String execute() throws Exception {
- //创建一个集合
- List<Person> list = new ArrayList<Person>();
- //创建一个person对象
- Person person = new Person();
- person.setPid(1);
- person.setPname("张三");
- person.setPage(15);
- person.setDate(new Date());
- //创建一个person对象
- Person person1 = new Person();
- person1.setPid(2);
- person1.setPname("李四");
- person1.setPage(20);
- person1.setDate(new Date());
- //将person对象添加到集合中去
- list.add(person);
- list.add(person1);
- //创建Gson对象
- Gson gson = new Gson();
- //使用toJson方法将集合转换成String数组
- String result = gson.toJson(list);
- //创建HttpServletResponse
- HttpServletResponse response = ServletActionContext.getResponse();
- //设置编码格式,以及信息类型 及 是否有缓存的设置
- response.setContentType("application/json;charset=utf-8");
- response.setHeader("caChe-Control", "no-cache");
- //创建PrintWriter 对象 将信息写入到Reponse中
- PrintWriter out =response.getWriter();
- out.print(result);
- //清空缓存
- out.flush();
- //关闭
- out.close();
- /*************************************测试 GSON的fromJson方法**********************************************************/
- //创建fromJson转换时需要的类型,注意对于特殊的结合需要使用这个方法,其他普通对象则可以直接使用 *.class
- Type listtype = new TypeToken<List<Person>>() {}.getType();//这里使用了一个匿名类
- //使用Gson的fromJson方法
- /*
- * 这里我们选择有两个参数的重在方法 fromJson(String,class<T>);
- *
- * String :需要转换成集合的JSON文本
- *
- * class<T> :转换集合的类型
- * */
- List<Person> lists = gson.fromJson(this.getGson(), listtype);
- //输入信息
- System.out.println(lists.get(0).getPname());
- return null;
- }
- }
JSP:
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <script type="text/javascript" src="WEB-JS/jquery-1.5.1.js"></script>
- </head>
- <body id="theBody">
- <script type="text/javascript">
- function getAllInfo() {
- $.post("/struts2/getgsons.action", {
- Gson:"[{'pid':1,'pname':'张三','page':15,'date':'2011-3-21 15:36:52'},{'pid':2,'pname':'李四','page':19,'date':'2012-3-21 15:36:52'}]"
- }, function(returnedData, status) {
- if ("success" == status) {
- for ( var i = 0; i < returnedData.length; i++) {
- alert(returnedData);
- }
- }
- })
- }
- </script>
- <input type="button" value="Get All Info" οnclick="getAllInfo();">
- </body>
- </html>
json 主页 http://www.json.org
转载自:http://perfectplan.iteye.com/blog/1561953