Json转换利器Gson二、GsonBuilder
2016-01-25 16:58
441 查看
Gson只能创建默认配置格式json对象,GsonBuilder能引入自己所需要的配置,从而创建需要的的json对象。
实体:
结果:
简单对象之间的转化:
简单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>]
实体:
<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导出null值、格式化输出、日期时间
- Json转换利器Gson三、TypeAdapter的使用
- 几种常用的 CCMenuItem、自定义Button
- SLRequest
- UITextField详解
- Android NDK Build 参数
- Android NDK Build 参数
- mysql_query与 mysql_real_query区别
- mysql_query与 mysql_real_query区别
- error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '
- error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '
- MUI - 将tap模拟成原生click体验
- 【转】加快 FlashBuilder4 的编译速度
- 【转】加快 FlashBuilder4 的编译速度
- 【转】select,iocp,epoll,kqueue及各种I/O复用机制
- 【转】select,iocp,epoll,kqueue及各种I/O复用机制
- 2个更新UI的方法--activity.runOnUiThread及handler.post
- 学习 ui-router - 路由控制
- UICollectionView资料收集
- 项目用druid,长时间不访问应用,再访问又连接不上了数据库了