GSON實現(xiàn)Java對象的JSON序列化與反序列化的實例教程
從GitHub下載GSON:https://github.com/google/gson
Gson的應(yīng)用主要為toJson與fromJson兩個轉(zhuǎn)換函數(shù),而在使用這種對象轉(zhuǎn)換之前需先創(chuàng)建好對象的類別以及其成員才能成功的將JSON字符串成功轉(zhuǎn)換成相對應(yīng)的對象。
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結(jié)果將是
{"answer1":100,"answer2":"Hello world!"}
反序列化JSON字符串成對應(yīng)的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的轉(zhuǎn)換**************************"); System.out.println("將一個Bean轉(zhuǎn)換成為json字符串->"); User user1 = new User("鳳姐",12,new StringBuffer("未知"),true); System.out.println("轉(zhuǎn)換之前的user1"+user1); String json = gson.toJson(user1); System.out.println("User對象轉(zhuǎn)換成為Json字符串,json==="+json); System.out.println("***************************"); System.out.println("將一個json字符串轉(zhuǎn)換成為Bean->"); User user2 = gson.fromJson(json, User.class); System.out.println("轉(zhuǎn)換成為的user2=="+user2); System.out.println(); System.out.println("2Collection集合的轉(zhuǎn)換**************************"); System.out.println("將一個Bean的List集合轉(zhuǎn)換成為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集合對象轉(zhuǎn)換成為Json字符串,json==="+json); System.out.println("***************************"); System.out.println("將一個json字符串轉(zhuǎn)換成為Bean的List集合->"); Collection<User> userList2 = gson.fromJson(json, new TypeToken<Collection<User>>(){}.getType()); System.out.println("轉(zhuǎn)換成為的User的List集合,userList2="+userList2); System.out.println(); System.out.println("3Array數(shù)組的轉(zhuǎn)換**************************"); System.out.println("將一個Bean的Array數(shù)組轉(zhuǎn)換成為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的數(shù)組對象轉(zhuǎn)換成為Json字符串,json==="+json); System.out.println("***************************"); System.out.println("將一個json字符串轉(zhuǎn)換成為Bean的數(shù)組對象->"); User [] userArray2 = gson.fromJson(json, new TypeToken<User[]>(){}.getType()); System.out.println("轉(zhuǎn)換成為的User的數(shù)組對象,userArray2="+Arrays.toString(userArray2)); System.out.println(); System.out.println("4Map的轉(zhuǎn)換**************************"); System.out.println("將一個Bean的Map轉(zhuǎn)換成為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集合轉(zhuǎn)換成為Json字符串,json==="+json); System.out.println("***************************"); System.out.println("將一個json字符串轉(zhuǎn)換成為Bean的數(shù)組對象->"); Map<String,User> map2 = gson.fromJson(json, new TypeToken<Map<String,User>>(){}.getType()); System.out.println("轉(zhuǎn)換成為的User的數(shù)組對象,map2=="+map2); } }
運行結(jié)果:
1普通的Bean的轉(zhuǎn)換************************** 將一個Bean轉(zhuǎn)換成為json字符串-> 轉(zhuǎn)換之前的user1{name=鳳姐;age=12;sex=未知;isChild=true} User對象轉(zhuǎn)換成為Json字符串,json==={"name":"鳳姐","age":12,"sex":"未知","isChild":true} *************************** 將一個json字符串轉(zhuǎn)換成為Bean-> 轉(zhuǎn)換成為的user2=={name=鳳姐;age=12;sex=未知;isChild=true} 2Collection集合的轉(zhuǎn)換************************** 將一個Bean的List集合轉(zhuǎn)換成為json字符串-> User的List集合對象轉(zhuǎn)換成為Json字符串,json===[{"name":"如花","age":10,"sex":"男","isChild":false},{"name":"如花","age":11,"sex":"男","isChild":false},{"name":"如花","age":12,"sex":"男","isChild":false}] *************************** 將一個json字符串轉(zhuǎn)換成為Bean的List集合-> 轉(zhuǎn)換成為的User的List集合,userList2=[{name=如花;age=10;sex=男;isChild=false}, {name=如花;age=11;sex=男;isChild=false}, {name=如花;age=12;sex=男;isChild=false}] 3Array數(shù)組的轉(zhuǎn)換************************** 將一個Bean的Array數(shù)組轉(zhuǎn)換成為json字符串-> User的數(shù)組對象轉(zhuǎn)換成為Json字符串,json===[{"name":"芙蓉","age":20,"sex":"人妖","isChild":true},{"name":"芙蓉","age":20,"sex":"人妖","isChild":true},{"name":"芙蓉","age":20,"sex":"人妖","isChild":true}] *************************** 將一個json字符串轉(zhuǎn)換成為Bean的數(shù)組對象-> 轉(zhuǎn)換成為的User的數(shù)組對象,userArray2=[{name=芙蓉;age=20;sex=人妖;isChild=true}, {name=芙蓉;age=20;sex=人妖;isChild=true}, {name=芙蓉;age=20;sex=人妖;isChild=true}] 4Map的轉(zhuǎn)換************************** 將一個Bean的Map轉(zhuǎn)換成為json字符串-> User的Map集合轉(zhuǎn)換成為Json字符串,json==={"10":{"name":"芙蓉","age":20,"sex":"人妖","isChild":true},"11":{"name":"芙蓉","age":20,"sex":"人妖","isChild":true},"12":{"name":"芙蓉","age":20,"sex":"人妖","isChild":true}} *************************** 將一個json字符串轉(zhuǎn)換成為Bean的數(shù)組對象-> 轉(zhuǎn)換成為的User的數(shù)組對象,map2=={10={name=芙蓉;age=20;sex=人妖;isChild=true}, 11={name=芙蓉;age=20;sex=人妖;isChild=true}, 12={name=芙蓉;age=20;sex=人妖;isChild=true}}
- java對象序列化與反序列化原理解析
- 實例分析java對象的序列化和反序列化
- java中對象的序列化與反序列化深入講解
- Java對象的XML序列化與反序列化實例解析
- Java將對象寫入文件讀出_序列化與反序列化的實例
- Java對象的序列化與反序列化詳解
- Java IO流對象的序列化和反序列化實例詳解
- 詳解Java 對象序列化和反序列化
- java對象的序列化和反序列化
- java 對象的序列化和反序列化詳細(xì)介紹
- 詳解Java中對象序列化與反序列化
- Java中對象序列化與反序列化詳解
- java對象序列化與反序列化的默認(rèn)格式和json格式使用示例
- 深入理解Java對象的序列化與反序列化的應(yīng)用
- 深入理解Java序列化與反序列化
相關(guān)文章
Spring?Boot?Admin?監(jiān)控指標(biāo)接入Grafana可視化的實例詳解
Spring Boot Admin2 自帶有部分監(jiān)控圖表,如圖,有線程、內(nèi)存Heap和內(nèi)存Non Heap,這篇文章主要介紹了Spring?Boot?Admin?監(jiān)控指標(biāo)接入Grafana可視化,需要的朋友可以參考下2022-11-11Java 高并發(fā)十: JDK8對并發(fā)的新支持詳解
本文主要介紹Java 高并發(fā)JDK8的支持,這里整理了詳細(xì)的資料及1. LongAdder 2. CompletableFuture 3. StampedLock的介紹,有興趣的小伙伴可以參考下2016-09-09Java 重寫時應(yīng)當(dāng)遵守的 11 條規(guī)則
這篇文章主要介紹了Java 重寫時應(yīng)當(dāng)遵守的 11 條規(guī)則,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03