您的位置:首页 > 产品设计 > UI/UE

Json转换利器Gson二、GsonBuilder

2016-01-25 16:58 441 查看
Gson只能创建默认配置格式json对象,GsonBuilder能引入自己所需要的配置,从而创建需要的的json对象。

实体:

<span style="font-size:14px;">package gson;

public class Person {

private String name;

private String sex;

private int age;

public Person(){}

public Person(String name,String sex,int age){
this.name = name;
this.sex = sex;
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

}
</span>
Test类:
<span style="font-size:14px;">package gson;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.commons.lang3.builder.ToStringBuilder;

import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;

public class GsonSecond {

public static void main(String[] args) {

//注意这里的Gson的构建方式为GsonBuilder,区别于test1中的Gson gson = new Gson();
Gson gson = new GsonBuilder()
.excludeFieldsWithoutExposeAnnotation() //不导出实体中没有用@Expose注解的属性
.enableComplexMapKeySerialization() //支持Map的key为复杂对象的形式
.serializeNulls().setDateFormat("yyyy年MM月dd日 HH时mm分ss秒")//时间转化为特定格式
.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)//会把字段首字母大写,注:对于实体上使用了@SerializedName注解的不会生效.
.setPrettyPrinting() //对json结果格式化.
.setVersion(1.0)    //有的字段不是一开始就有的,会随着版本的升级添加进来,那么在进行序列化和返序列化的时候就会根据版本号来选择是否要序列化.
//@Since(版本号)能完美地实现这个功能.还的字段可能,随着版本的升级而删除,那么
//@Until(版本号)也能实现这个功能,GsonBuilder.setVersion(double)方法需要调用.
.create();

Student s1 = new Student();
s1.setId(1);
s1.setName("john");
s1.setBirthDay(new Date());

System.out.println("简单对象之间的转化:");
// 简单的bean转为json
String s11 = gson.toJson(s1);
System.out.println("简单Bean转化为Json===" + s11);

// json转为简单Bean
Student s = gson.fromJson(s11, Student.class);
System.out.println("Json转为简单Bean===" + s);

Student s2 = new Student();
s2.setId(2);
s2.setName("张三");
s2.setBirthDay(new Date());

Student s3 = new Student();
s3.setId(3);
s3.setName("李四");
s3.setBirthDay(new Date());

Student s4 = new Student();
s4.setId(4);
s4.setName("王五");
s4.setBirthDay(null);

List<Student> list = new ArrayList<Student>();
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);

System.out.println("----------带泛型的List之间的转化-------------");
// 带泛型的list转化为json
String s22 = gson.toJson(list);
System.out.println("带泛型的list转化为json==" + s22);

// json转为带泛型的list
List<Student> retList = gson.fromJson(s22,
new TypeToken<List<Student>>() {
}.getType());
for (Student stu : retList) {
System.out.println(ToStringBuilder.reflectionToString(stu));
}

}
}
</span>


结果:

简单对象之间的转化:

简单Bean转化为Json==={

  "Name": "john",

  "bir": "2016年01月25日 16时57分56秒"

}

Json转为简单Bean===gson.Student@578567de

----------带泛型的List之间的转化-------------

带泛型的list转化为json==[

  {

    "Name": "john",

    "bir": "2016年01月25日 16时57分56秒"

  },

  {

    "Name": "张三",

    "bir": "2016年01月25日 16时57分56秒"

  },

  {

    "Name": "李四",

    "bir": "2016年01月25日 16时57分56秒"

  },

  {

    "Name": "王五",

    "bir": null

  }

]

gson.Student@68f99651[id=0,name=john,birthDay=Mon Jan 25 16:57:56 CST 2016]

gson.Student@43e1542f[id=0,name=张三,birthDay=Mon Jan 25 16:57:56 CST 2016]

gson.Student@7e5dfc79[id=0,name=李四,birthDay=Mon Jan 25 16:57:56 CST 2016]

gson.Student@4c6aacbf[id=0,name=王五,birthDay=<null>]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  GsonBuilder