首頁 > Java > java教程 > 主體

GSON實作Java物件的JSON序列化與反序列化的實例教程

高洛峰
發布: 2017-01-18 09:05:48
原創
1574 人瀏覽過

從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!"}
登入後複製

反序列化JSONSON字串成

Examples example2= gson.fromJson(json,Examples.class);
登入後複製

反序列化JSONSON字串成對應的JDnvvvv$相同

物件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);
  }
}
登入後複製

   

更多GSON實作Java物件的JSON序列化與反序列化的實例教學相關文章請關注PHP中文網!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板