GSON 解析json 無需在手動解析實體類

實體類的父類 該類下 Json2bean 是把json轉成實體類 Json2ListBean 吧json轉成 list<實體類>java

GSON使用注意項 :json屬性名和實體的屬性名必須一致,不一致則賦值爲空。android

<!-- lang: java -->json

/**
  • File Name:Bean.java
  • Package Name:com.samon.lowo.bean
  • Date:2013-4-24上午9:21:50
  • Copyright (c) 2013, http://www.samontec.net/ All Rights Reserved.

*/google

package com.samon.sais.bean;.net

import java.io.Serializable; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map;code

import org.json.JSONException; import org.json.JSONObject;對象

import android.util.Log;get

import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken;string

/**hash

  • TODO 實體類父類

  • @date: 2013-4-24 上午9:21:50

  • @author TFC

  • @version 1.0.0 */ public class Bean implements Serializable {

    /** * */ private static final long serialVersionUID = 1L; int code = -1;

    public int getCode() { return code; }

    // 狀態值

    /**

    • 將實體類傳換成 HashMap

    • @author TFC

    • @createtime 2013-4-24 上午9:24:02

    • @param obj

    • @return HashMap

    • @throws IllegalArgumentException

    • @throws IllegalAccessException

    • @exception */ public static HashMap<String, Object> objToHash(Object obj) throws IllegalArgumentException, IllegalAccessException { HashMap<String, Object> hashMap = new HashMap<String, Object>(); Class clazz = obj.getClass(); List<Class> clazzs = new ArrayList<Class>();

      do { clazzs.add(clazz); clazz = clazz.getSuperclass(); } while (!clazz.equals(Object.class));

      for (Class iClazz : clazzs) { Field[] fields = iClazz.getDeclaredFields(); for (Field field : fields) { Object objVal = null; field.setAccessible(true); objVal = field.get(obj); if (objVal == null) { continue; } if (field.getName().equals("serialVersionUID")) { continue; } hashMap.put(field.getName(), objVal); } } return hashMap; }

    /**

    • 將map轉換成Javabean
    • @param javabean
    • javaBean
    • @param data
    • map數據

    */ public static Object toJavaBean(Object javabean, Map<String, String> data) { Method[] methods = javabean.getClass().getDeclaredMethods(); for (Method method : methods) { try { if (method.getName().startsWith("set")) { String field = method.getName(); field = field.substring(field.indexOf("set") + 3); field = field.toLowerCase().charAt(0) + field.substring(1); method.invoke(javabean, new Object[] { data.get(field) }); } } catch (Exception e) { } } return javabean; }

    public static String Bean2Json(Object obj) { return new Gson().toJson(obj); }

    public static <T> T Json2bean(String json, Class<T> c) { return new Gson().fromJson(json, c); }

    public static <T> T Json2bean(JSONObject json, Class<T> c) { return new Gson().fromJson(json.toString(), c); }

    public static <T> T Json2bean(JSONObject json) { return new Gson().fromJson(json.toString(), new TypeToken<T>() { }.getType()); }

    public static <T> T Json2bean(String json) { return new Gson().fromJson(json.toString(), new TypeToken<T>() { }.getType()); }

    public static <T> List<T> Json2ListBean (String json,Class<T> c){ List<T> lis=new ArrayList<T>(); JsonParser parser = new JsonParser();
    JsonElement jsonEl = parser.parse(json); JsonArray jsonObj = null;
    jsonObj = jsonEl.getAsJsonArray();//轉換成Json對象
    for (int i = 0; i < jsonObj.size(); i++) { lis.add(Json2bean(jsonObj.get(i).toString(),c)); }

    return lis;

    } public static <T> List<T> Json2ListBean (JsonElement json,Class<T> c){ List<T> lis=new ArrayList<T>(); JsonArray jsonObj = null;
    jsonObj = json.getAsJsonArray();//轉換成Json對象
    for (int i = 0; i < jsonObj.size(); i++) { lis.add(Json2bean(jsonObj.get(i).toString(),c)); } return lis; }

    public static Map<String, Object> JsontoMap(String jsonStr) { Map<String, Object> result = new HashMap<String, Object>(); JSONObject jsonObject; try { jsonObject = new JSONObject(jsonStr);

    Iterator<String> iterator = jsonObject.keys();
     	String key = null;
     	String value = null;
     	while (iterator.hasNext()) {
     		try {
     			key = iterator.next();
     			value = jsonObject.getString(key);
     			result.put(key, value);
     		} catch (Exception e) {
     			// TODO: handle exception
     			Log.e("JsontoMap", e.toString());
     		}
     	}
     } catch (JSONException e1) {
     	// TODO Auto-generated catch block
     	e1.printStackTrace();
     }
     return result;

    }

    /**

    • 兩個類的屬性對比 同樣的則跳過

    • @author TFC

    • @createtime 2013-5-4 下午2:23:26

    • @param obj

    • @param oldobj

    • @return

    • @throws IllegalArgumentException

    • @throws IllegalAccessException

    • @exception */ public static HashMap<String, Object> objToHash(Object obj, Object oldobj) throws IllegalArgumentException, IllegalAccessException { HashMap<String, Object> hashMap = new HashMap<String, Object>(); Class clazz = obj.getClass(); Class oldClazz = obj.getClass(); List<Class> clazzs = new ArrayList<Class>(); List<Class> oldClazzs = new ArrayList<Class>(); do { clazzs.add(clazz); clazz = clazz.getSuperclass(); } while (!clazz.equals(Object.class));

      do { oldClazzs.add(oldClazz); oldClazz = oldClazz.getSuperclass(); } while (!oldClazz.equals(Object.class)); for (int i = 0; i < clazzs.size(); i++) { Field[] fields = clazzs.get(i).getDeclaredFields(); Field[] oldfields = oldClazzs.get(i).getDeclaredFields(); for (int j = 0; j < fields.length; j++) { Field field = fields[j]; Field oldField = oldfields[j]; if (field.getName().equals(oldField.getName())) { Object objVal = null; field.setAccessible(true); oldField.setAccessible(true); objVal = field.get(obj); if (objVal == null || objVal.equals(oldField.get(oldobj))) { continue; } hashMap.put(field.getName(), objVal); }

      }

      } return hashMap; }

}

使用例子: class Person extends Bean { private String name; private int age; } json= {"name":"tfc","age":"25"} Person p=Person.Json2bean(json,Person.Class);

相關文章
相關標籤/搜索