Json與Java對象互轉之Gson學習,jsonjava對象gson
Json與Java對象互轉之Gson學習
請尊重他人的勞動成果,轉載請註明出處:Json與Java對象互轉之Gson學習
我曾在《XML,Object,Json轉換之淺析Xstream的使用》一文中介紹過使用XStream進行XML,Object,Json之間的轉換,雖然XStream內建了對Json的支援,但是效果不是特別好,畢竟XStream重點不在Json。下面就介紹另外一種工具。
Gson(又稱Google Gson)是Google公司發布的一個開放原始碼的Java庫,主要用途為序列化Java對象為JSON字串,或反序列化JSON字串成Java對象。
1.如何使用Gson?
首先從http://code.google.com/p/google-gson/downloads/list上下載Gson的jar包,然後將其匯入到項目中。然後,就可以在你的項目中使用Gson了。
2.
主要方法
Gson的應用主要為toJson與fromJson兩個轉換方法,而在使用這種對象轉換之前需先建立好對象的類以及其成員才能成功的將JSON字串成功轉換成相對應的對象。
3. Gson的應用執行個體
/** * 使用Gson實現對象,Json互轉 * @author jph * Date:2014.09.29 */public class GsonUtil { public static Gson gson; /**Json轉JavaBean**/ public static final int JSON_JAVABEAN=0x10001; /**Json轉List<T>**/ public static final int JSON_LIST=0x10002; /**Json轉Map<T>**/ public static final int JSON_MAP=0x10004; /** * 將對象轉換成Json格式的字串 * @param object 要轉換成Json的對象 * @return String:Json格式的字串 */ public static String convertObject2Json(Object object) { gson=new Gson(); return gson.toJson(object); } /** * 將Json轉換成Java對象 * @param inputStream 要轉換成Java對象的inputStream * @param javaBean List擷取Map中所包含的javaBean * @param convertFlag 轉換類型標識 * @return Object:Java對象 */ public static Object convertJson2Object(InputStream inputStream,Class<?>javaBean ,int convertFlag) { gson=new Gson(); Object object=null;// String json=inputStream2String(inputStream); BufferedReader reader=intputStream2BufferedReader(inputStream); Type type=getType(javaBean,convertFlag); object=gson.fromJson(reader,type); return object; } /** * 擷取要轉換成的物件類型 * @param javaBean * @param convertFlag * @return */ private static Type getType(Class<?> javaBean,int convertFlag) { Type type=null; switch (convertFlag) { case JSON_LIST: if (javaBean.equals(News.class)) {//Json轉List泛型 type=new TypeToken<List<News>>(){}.getType(); } break; case JSON_MAP: if (javaBean.equals(News.class)) {//Json轉Map泛型 type=new TypeToken<Map<String,News>>(){}.getType(); } break; case JSON_JAVABEAN://Json轉JavaBean type=javaBean; break; } return type; } /** * 將InputStream封裝成BufferedReader * @param inputStream * @return */ private static BufferedReader intputStream2BufferedReader(InputStream inputStream) { return new BufferedReader(new InputStreamReader(inputStream)); }}
程式碼分析:
在將Json轉換成對象的時候,上面代碼是從伺服器端擷取輸入資料流,然後將輸入資料流封裝成BufferedReader對象,然後通過fromJson()方法將Json轉換成Java對象。
Gson的fromJson()方法的第一個參數支援String、JsonElement和Reader類型的參數,可以根據需要進行選擇。fromJson()方法的第二個參數支援Type和Class<?>類型的參數,當將Json轉成JavaBean時可以使用Class<?>參數,也就是用對應JavaBean的JavaBean.calss作為第二個參數。當需要將Json轉出成List泛型,Map泛型的時候需要採用TypeToken將第二個參數轉換成Type類型(TypeToken是gson提供的資料類型轉換器,可以支援各種資料集合類型轉換。)。
Java 用Gson 把json 轉成嵌套對象
轉json字串
final Gson gsonBuilder = new GsonBuilder().create();
String jsonStr= gsonBuilder.toJson(f);
----------------------------------
轉實體
final Gson gsonBuilder = new GsonBuilder().create();
final F f = gsonBuilder.fromJson(jsonStr, F.class);
想看json字串什麼樣 你可以new出一個F 然後轉過去看看結構
這樣的 {"p":{"s":"test"}}
Java將Json字串轉成對象的問題
用Gson。:code.google.com/p/google-gson/downloads/list
定義Java類:
class Feature { public Attributes attributes; public Geometry geometry; } class Attributes { public String OBJECTID, ID, CD, HG, DP_AS.......; } class Geometry { public Float x, y; } Feature feature; public static MyObject fromJson(String json) { return new Gson().fromJson(json, MuObject.class); }}然後在需要的地方調用:
MyObject obj = MyObject.fromJson("{......}");MyObject.Attributes attributes = obj.feature.attributes;MyObject.Geometry geometry = obj.feature.geometry;