google gson学习sina - 乐橙lc8

google gson学习sina

2018-11-20 07:22:12 | 作者: 紫萱 | 标签: 序列化,代码,类型 | 浏览: 6135

google gson学习
https://lyking2001.iteye.com/blog/504156
Gson网址https://code.google.com/p/google-gson/

1.简略的处理list和map
Gson gson = new Gson(); 
List testList = new ArrayList(); 
testList.add("first"); 
testList.add("second"); 
String listToJson = gson.toJson(testList); 
System.out.println(listToJson); 
//prints ["first","second"] 

 
Map testMap = new HashMap(); 
testMap.put("id", "id.first"); 
testMap.put("name","name.second"); 
String mapToJson = gson.toJson(testMap); 
System.out.println(mapToJson); 
//prints {"id":"id.first","name":"name.second"} 

2.处理带泛型的调集
List TestBean testBeanList = new ArrayList TestBean 
TestBean testBean = new TestBean(); 
testBean.setId("id"); 
testBean.setName("name"); 
testBeanList.add(testBean); 
Java代码 
java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken List TestBean () { 
}.getType(); 
String beanListToJson = gson.toJson(testBeanList,type); 
System.out.println(beanListToJson); 
//prints [{"id":"id","name":"name"}] 

 
List TestBean testBeanListFromJson = gson.fromJson(beanListToJson, type); 
System.out.println(testBeanListFromJson); 
//prints [TestBean@1ea5671[id=id,name=name,birthday= null ]] 
map等其他调集类型同上


3.Date类型转化

先写东西类
import java.lang.reflect.Type; 
import com.google.gson.JsonDeserializationContext; 
import com.google.gson.JsonDeserializer; 
import com.google.gson.JsonElement; 
import com.google.gson.JsonParseException; 
public class UtilDateDeserializer implements JsonDeserializer java.util.Date { 
 @Override 
 public java.util.Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) 
 throws JsonParseException { 
 return new java.util.Date(json.getAsJsonPrimitive().getAsLong()); 
} 

import java.lang.reflect.Type; 
import com.google.gson.JsonElement; 
import com.google.gson.JsonPrimitive; 
import com.google.gson.JsonSerializationContext; 
import com.google.gson.JsonSerializer; 
public class UtilDateSerializer implements JsonSerializer java.util.Date { 
 @Override 
 public JsonElement serialize(java.util.Date src, Type typeOfSrc, 
 JsonSerializationContext context) { 
 return new JsonPrimitive(src.getTime()); 
Java代码 
 * 序列化办法 
 * @param bean 
 * @param type 
 * @return 
 public static String bean2json(Object bean, Type type) { 
 Gson gson = new GsonBuilder().registerTypeAdapter(java.util.Date.class, new UtilDateSerializer()) 
 .setDateFormat(DateFormat.LONG).create(); 
 return gson.toJson(bean); 
 /** 
 * 反序列化办法 
 * @param json 
 * @param type 
 * @return 
 public static T T json2bean(String json, Type type) { 
 Gson gson = new GsonBuilder().registerTypeAdapter(java.util.Date.class, new UtilDateDeserializer()) 
 .setDateFormat(DateFormat.LONG).create(); 
 return gson.fromJson(json, type); 
 } 



现在开端测验
List TestBean testBeanList = new ArrayList TestBean 
TestBean testBean = new TestBean(); 
testBean.setId("id"); 
testBean.setName("name"); 
testBean.setBirthday(new java.util.Date()); 
testBeanList.add(testBean); 
java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken List TestBean () { 
}.getType(); 
String beanListToJson = bean2json(testBeanList, type); 
System.out.println("beanListToJson:" + beanListToJson); 
//prints [{"id":"id","name":"name","birthday":1256531559390}] 
List TestBean testBeanListFromJson = json2bean(beanListToJson, type); 
System.out.println(testBeanListFromJson); 
//prints [TestBean@77a7f9[id=id,name=name,birthday=Mon Oct 26 12:39:05 CST 2009]] 
 

跋文:关于java.sql.Date的转化同上相似,写两个类用于其序列化和反序列化即可SQLDateDeserializer implements JsonDeserializer java.sql.Date
SQLDateSerializer implements JsonSerializer java.sql.Date


关于GsonBuilder详见:
[url] https://google-gson.googlecode.com/svn/tags/1.2.3/docs/javadocs/com/google/gson/GsonBuilder.html[/url]



Gson扼要运用笔记
https://www.cnblogs.com/chenlhuaf/archive/2011/05/01/gson_test.html
gson和其他现有java json类库最大的不一起gson需求序列化得实体类不需求运用annotation来标识需求序列化得字段,一起gson又能够经过运用annotation来灵敏装备需求序列化的字段。

下面是一个简略的比方:

Person实体

[url]public class Person {

  private String name;
  private int age;

  /**
  * @return the name
  */
  public String getName() {
  return name;
  }

  /**
  * @param name the name to set
  */
  public void setName(String name) {
  this.name = name;
  }

  /**
  * @return the age
  */
  public int getAge() {
  return age;
  }

  /**
  * @param age the age to set
  */
  public void setAge(int age) {
  this.age = age;
  }
 
  @Override
  public String toString()
  {
  return name + ":" +age;
  }
}[/url]

实体很简略,两个字段,当然实体中的字段也能够是List或许Set类型的。

生成Json字符串

[url]Gson gson = new Gson();
List Person persons = new ArrayList Person
for (int i = 0; i i++) {
  Person p = new Person();
  p.setName("name" + i);
  p.setAge(i * 5);
  persons.add(p);
}
String str = gson.toJson(persons);[/url]

上面的代码重点是Gson目标,它供给了toJason()办法将目标转化成Json字符串,上面代码的str目标值为:

[{"name":"name0","age":0},{"name":"name1","age":5},{"name":"name2","age":10},{"name":"name3","age":15},{"name":"name4","age":20},{"name":"name5","age":25},{"name":"name6","age":30},{"name":"name7","age":35},{"name":"name8","age":40},{"name":"name9","age":45}]

很规范的json数据,很简略吧,呵呵。

下面来看看gson的反序列化,Gson供给了fromJson()办法来实现从Json相关目标到java实体的办法。

在日常运用中,咱们一般都会碰到两种状况,转成单一实体目标和转化成目标列表或许其他结构。

先来看第一种:

比方json字符串为:[{"name":"name0","age":0}]

代码:

Person person = gson.fromJson(str, Person.class);
供给两个参数,分别是json字符串以及需求转化目标的类型。

第二种,转化成列表类型:

代码:

List Person ps = gson.fromJson(str, new TypeToken List Person (){}.getType());
for(int i = 0; i ps.size() ; i++)
 Person p = ps.get(i);
 System.out.println(p.toString());
}

能够看到上面的代码运用了TypeToken,它是gson供给的数据类型转化器,能够支撑各种数据调集类型转化。

Gson的根本运用就是这么多,至于annotation方面能够参阅gson的官方文档,期望能对初学java和gson的同学有所协助。
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表乐橙lc8立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章