Gson网址http://code.google.com/p/google-gson/
这段时间项目中用到了json数据,采用的是google德Gson,经过两天的学习,算是有了点收获,现在把Gson的基本应用跟大家分享一下,
Gson主要完成JavaBean和json数据之间的转换,:
JavaBean--->json,称之为序列化(Serialization)
json--->JavaBean,称之为反序列化(Deserialization)
1、Gson对普通JavaBean的处理
Person.java
public class Person {
private Integer id;
private String userName;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
测试代码:
public static void main(String[] args) {
Person person=new Person();
person.setId(new Integer(1));
person.setUserName("单守臣");
person.setPassword("shanshouchen");
GsonBuilder builder=new GsonBuilder();
Gson gson=builder.create();
//序列化
String person_json=gson.toJson(person);
System.out.println(person_json);
//反序列化
Person person_temp=gson.fromJson(person_json,Person.class);
System.out.println(person_temp.getUserName());
}
打印结果:
{"id":1,"userName":"单守臣","password":"shanshouchen"}
单守臣
2、Gson对数组的处理
public static void main(String[] args) {
String[] array={"aaa","bbb","ccc"};
GsonBuilder builder=new GsonBuilder();
Gson gson=builder.create();
//序列化
String array_json=gson.toJson(array);
System.out.println(array_json);
//反序列化
String[] array_temp=gson.fromJson(array_json,String[].class);
for(String str:array_temp){
System.out.println(str);
}
}
打印结果
["aaa","bbb","ccc"] aaa bbb ccc
Gson支持多维数组,任意复杂的元素类型
3、Gson对List的处理
public static void main(String[] args) {
List array=new ArrayList();
array.add("andy");
array.add(854587808);
array.add(new Date());
GsonBuilder builder=new GsonBuilder();
Gson gson=builder.create();
//序列化
String array_json=gson.toJson(array);
System.out.println(array_json);
//反序列化
List array_temp=gson.fromJson(array_json,List.class);
for(int i=0;i<array_temp.size();i++){
System.out.println(array_temp.get(i));
}
}
打印结果:
["andy",854587808,"Jul 30, 2012 11:38:06 PM"] andy 8.54587808E8 Jul 30, 2012 11:38:06 PM
4、Gson对Map的处理
public static void main(String[] args) {
Map map=new HashMap();
map.put("id",1L);
map.put("userName","andy");
map.put("date",new Date());
GsonBuilder builder=new GsonBuilder();
Gson gson=builder.create();
//序列化
String map_json=gson.toJson(map);
System.out.println(map_json);
//反序列化
Map map_temp=gson.fromJson(map_json,Map.class);
Iterator iterator=map.keySet().iterator();
while(iterator.hasNext()){
String key=iterator.next().toString();
String value=map_temp.get(key).toString();
System.out.println("key:"+key+"\tvalue:"+value);
}
}
打印结果
{"id":1,"userName":"andy","date":"Jul 30, 2012 11:45:57 PM"}
key:id value:1.0
key:userName value:andy
key:date value:Jul 30, 2012 11:45:57 PM
5、Gson对泛型的处理
public static void main(String[] args) {
List<Person> listPerson=new ArrayList<Person>();
Person person1=new Person();
person1.setId(new Integer(1));
person1.setUserName("单守臣");
person1.setPassword("shanshouchen");
Person person2=new Person();
person2.setId(new Integer(2));
person2.setUserName("andy");
person2.setPassword("xiayuu");
listPerson.add(person1);
listPerson.add(person2);
java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken<List<Person>>() {}.getType();
GsonBuilder builder=new GsonBuilder();
Gson gson=builder.create();
//序列化
String listPerson_json=gson.toJson(listPerson,type);
System.out.println(listPerson_json);
//反序列化
List<Person> listPerson_temp=gson.fromJson(listPerson_json,type);
for(Person person:listPerson_temp){
System.out.println(person.getUserName());
}
}
打印结果
[{"id":1,"userName":"单守臣","password":"shanshouchen"},{"id":2,"userName":"andy","password":"xiayuu"}]
单守臣
andy
6、Date类型数据的转换
DateSerializerUtil.java
public class DateSerializerUtil implements JsonSerializer<Date> {
@Override
public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(src.getTime());
}
}
DateDeserializerUtil.java
public class DateDeserializerUtil implements JsonDeserializer<Date> {
@Override
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
return new Date(json.getAsJsonPrimitive().getAsLong());
}
}
测试代码:
public class Test {
public static void main(String[] args) {
List<Person> listPerson=new ArrayList<Person>();
Person person=new Person();
person.setId(new Integer(3));
person.setUserName("shanshouchen");
person.setPassword("andy");
person.setBirthday(new Date());
listPerson.add(person);
java.lang.reflect.Type type=new com.google.gson.reflect.TypeToken<List<Person>>(){}.getType();
String beanListToJson=bean2json(listPerson, type);
System.out.println(beanListToJson);
List<Person> testBeanListFromJson=json2bean(beanListToJson, type);
System.out.println(testBeanListFromJson);
}
/**
* 序列化方法
*
* @param bean
* @param type
* @return
*/
public static String bean2json(Object bean, Type type) {
Gson gson = new GsonBuilder().registerTypeAdapter(java.util.Date.class, new DateSerializerUtil()).setDateFormat(DateFormat.LONG).create();
return gson.toJson(bean);
}
/**
* 反序列化方法
* @param <T>
* @param json
* @param type
* @return
*/
public static <T> T json2bean(String json, Type type) {
Gson gson = new GsonBuilder().registerTypeAdapter(java.util.Date.class, new DateDeserializerUtil()).setDateFormat(DateFormat.LONG).create();
return gson.fromJson(json, type);
}
}
打印结果:
[{"id":3,"userName":"shanshouchen","password":"andy","birthday":1343665055906}]
[com.andy.test.Person@19fcc69]
Gson在实际的应用中的技巧很多,比如可以通过@Expose注解结合GsonBuilder对象的excludeFieldsWithoutExposeAnnotation()方法类过滤不需要被序列化的属性,想更加深入的学习Gson,可以参考官方文档
posted on
浙公网安备 33010602011771号