GSON实现Java对象的JSON序列化与反序列化的实例教程

 更新时间:2016年06月22日 11:49:25   投稿:goldensun  
GSON是Google开发并开源的一个Java的JSON转换库,这里我们将来讲解GSON实现Java对象的JSON序列化与反序列化的实例教程,需要的朋友可以参考下

从GitHub下载GSON:https://github.com/google/gson
Gson的应用主要为toJson与fromJson两个转换函数,而在使用这种对象转换之前需先创建好对象的类别以及其成员才能成功的将JSON字符串成功转换成相对应的对象。

 class Examples {
  private int answer1 = 100;
  private String answer2 = "Hello world!";
  Examples(){
  }   // default constructor
 }

序列化JAVA对象成JSON字符串

  Examples example1 = new Examples();
  Gson gson = new Gson();
  String json = gson.toJson(example1);

 json结果将是

{"answer1":100,"answer2":"Hello world!"}

反序列化JSON字符串成对应的JAVA对象

Examples example2= gson.fromJson(json,Examples.class);

==> example2即與example1相同

对象example1通过toJson序列化成JSON字符串传递,再宣告一个对象example2为接收了JSON后通过fromJson反序列化成example2,故example1与example2相同


示例:

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Collection; 
import java.util.HashMap; 
import java.util.Map; 
  
import com.google.gson.Gson; 
import com.google.gson.reflect.TypeToken; 
  
class User{ 
  public User(String name,int age,StringBuffer sex,boolean isChild){ 
   this.name = name; 
   this.age = age; 
   this.sex = sex; 
   this.isChild = isChild; 
  } 
  private String name; 
  private int age; 
  private StringBuffer sex; 
  private boolean isChild; 
  public String toString(){ 
   return "{name="+name+";age="+age+";sex="+sex+";isChild="+isChild+"}"; 
  } 
  public int hashCode(){ 
   return name.hashCode()*100+age; 
  } 
} 
  
public class GsonTest { 
  public static void main(String[] args) { 
   Gson gson = new Gson(); 
    
   System.out.println("1普通的Bean的转换**************************"); 
   System.out.println("将一个Bean转换成为json字符串->"); 
   User user1 = new User("凤姐",12,new StringBuffer("未知"),true); 
   System.out.println("转换之前的user1"+user1); 
   String json = gson.toJson(user1); 
   System.out.println("User对象转换成为Json字符串,json==="+json); 
    
   System.out.println("***************************"); 
   System.out.println("将一个json字符串转换成为Bean->"); 
   User user2 = gson.fromJson(json, User.class); 
   System.out.println("转换成为的user2=="+user2); 
   System.out.println(); 
    
   System.out.println("2Collection集合的转换**************************"); 
   System.out.println("将一个Bean的List集合转换成为json字符串->"); 
   Collection<User> userList1 = new ArrayList<User>(); 
   for(int i=0;i<3;i++){ 
    User user = new User("如花",10+i,new StringBuffer("男"),false); 
    userList1.add(user); 
   } 
   json = gson.toJson(userList1); 
   System.out.println("User的List集合对象转换成为Json字符串,json==="+json); 
    
   System.out.println("***************************"); 
   System.out.println("将一个json字符串转换成为Bean的List集合->"); 
   Collection<User> userList2 = 
      gson.fromJson(json, 
         new TypeToken<Collection<User>>(){}.getType()); 
   System.out.println("转换成为的User的List集合,userList2="+userList2); 
   System.out.println(); 
    
   System.out.println("3Array数组的转换**************************"); 
   System.out.println("将一个Bean的Array数组转换成为json字符串->"); 
   User [] userArray1 = new User[3]; 
   for(int i=0;i<userArray1.length;i++){ 
    userArray1[i] = new User("芙蓉",20,new StringBuffer("人妖"),true); 
   } 
   json = gson.toJson(userArray1); 
   System.out.println("User的数组对象转换成为Json字符串,json==="+json); 
    
   System.out.println("***************************"); 
   System.out.println("将一个json字符串转换成为Bean的数组对象->"); 
   User [] userArray2 = gson.fromJson(json, new TypeToken<User[]>(){}.getType()); 
   System.out.println("转换成为的User的数组对象,userArray2="+Arrays.toString(userArray2)); 
   System.out.println(); 
    
   System.out.println("4Map的转换**************************"); 
   System.out.println("将一个Bean的Map转换成为json字符串->"); 
   Map<String,User> map1 = new HashMap<String,User>(); 
   for(int i=0;i<3;i++){ 
    map1.put(""+(i+10), userArray1[i]); 
   } 
   json = gson.toJson(map1); 
   System.out.println("User的Map集合转换成为Json字符串,json==="+json); 
    
   System.out.println("***************************"); 
   System.out.println("将一个json字符串转换成为Bean的数组对象->"); 
   Map<String,User> map2 = 
      gson.fromJson(json, 
         new TypeToken<Map<String,User>>(){}.getType()); 
   System.out.println("转换成为的User的数组对象,map2=="+map2); 
  } 
} 

运行结果:

1普通的Bean的转换************************** 
将一个Bean转换成为json字符串-> 
转换之前的user1{name=凤姐;age=12;sex=未知;isChild=true} 
User对象转换成为Json字符串,json==={"name":"凤姐","age":12,"sex":"未知","isChild":true} 
*************************** 
将一个json字符串转换成为Bean-> 
转换成为的user2=={name=凤姐;age=12;sex=未知;isChild=true} 
 
2Collection集合的转换************************** 
将一个Bean的List集合转换成为json字符串-> 
User的List集合对象转换成为Json字符串,json===[{"name":"如花","age":10,"sex":"男","isChild":false},{"name":"如花","age":11,"sex":"男","isChild":false},{"name":"如花","age":12,"sex":"男","isChild":false}] 
*************************** 
将一个json字符串转换成为Bean的List集合-> 
转换成为的User的List集合,userList2=[{name=如花;age=10;sex=男;isChild=false}, {name=如花;age=11;sex=男;isChild=false}, {name=如花;age=12;sex=男;isChild=false}] 
 
3Array数组的转换************************** 
将一个Bean的Array数组转换成为json字符串-> 
User的数组对象转换成为Json字符串,json===[{"name":"芙蓉","age":20,"sex":"人妖","isChild":true},{"name":"芙蓉","age":20,"sex":"人妖","isChild":true},{"name":"芙蓉","age":20,"sex":"人妖","isChild":true}] 
*************************** 
将一个json字符串转换成为Bean的数组对象-> 
转换成为的User的数组对象,userArray2=[{name=芙蓉;age=20;sex=人妖;isChild=true}, {name=芙蓉;age=20;sex=人妖;isChild=true}, {name=芙蓉;age=20;sex=人妖;isChild=true}] 
 
4Map的转换************************** 
将一个Bean的Map转换成为json字符串-> 
User的Map集合转换成为Json字符串,json==={"10":{"name":"芙蓉","age":20,"sex":"人妖","isChild":true},"11":{"name":"芙蓉","age":20,"sex":"人妖","isChild":true},"12":{"name":"芙蓉","age":20,"sex":"人妖","isChild":true}} 
*************************** 
将一个json字符串转换成为Bean的数组对象-> 
转换成为的User的数组对象,map2=={10={name=芙蓉;age=20;sex=人妖;isChild=true}, 11={name=芙蓉;age=20;sex=人妖;isChild=true}, 12={name=芙蓉;age=20;sex=人妖;isChild=true}} 

相关文章

  • mybatis-plus开启sql日志打印的三种方法

    mybatis-plus开启sql日志打印的三种方法

    本文主要介绍了mybatis-plus开启sql日志打印的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Java实现导出Excel功能

    Java实现导出Excel功能

    通过java中Controller层,来接受请求,数据库查询到的数据进行封装,然后使用ExcelUtils进行输出,接下来通过本文给大家分享Java实现导出Excel功能的实例代码,感兴趣的朋友跟随小编一起看看吧
    2021-11-11
  • 使用spring aop 统一捕获异常和写日志的示例demo

    使用spring aop 统一捕获异常和写日志的示例demo

    本文通过一个小demo给大家介绍spring AOP 实现的异常捕获和日志的方法技巧,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-08-08
  • java ArrayList集合中的某个对象属性进行排序的实现代码

    java ArrayList集合中的某个对象属性进行排序的实现代码

    这篇文章主要介绍了java ArrayList集合中的某个对象属性进行排序的实现代码,需要的朋友可以参考下
    2016-07-07
  • 详解java中面向对象设计模式类与类的关系

    详解java中面向对象设计模式类与类的关系

    这篇文章主要介绍了java面向对象设计模式中类与类之间的关系,下面小编和大家一起来学习一下吧
    2019-05-05
  • Java导出CSV文件的方法

    Java导出CSV文件的方法

    这篇文章主要为大家详细介绍了Java导出CSV文件的方法,分页查询大数据量,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • java Long==Long有趣的现象详解

    java Long==Long有趣的现象详解

    这篇文章主要给大家介绍了关于java Long==Long有趣的现象的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • 详解JAVA后端实现统一扫码支付:微信篇

    详解JAVA后端实现统一扫码支付:微信篇

    本篇文章主要介绍了详解JAVA后端实现统一扫码支付:微信篇,这里整理了详细的代码,有需要的小伙伴可以参考下。
    2017-01-01
  • 使用Java实现大小写转换实例代码

    使用Java实现大小写转换实例代码

    最近在开发项目中遇到一个比较好用的方法,那就是对字符串中的字母大小进行转换,所以下面这篇文章主要给大家介绍了关于如何使用Java实现大小写转换的相关资料,需要的朋友可以参考下
    2022-06-06
  • CorsFilter 过滤器解决跨域的处理

    CorsFilter 过滤器解决跨域的处理

    这篇文章主要介绍了CorsFilter 过滤器解决跨域的处理操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06

最新评论