1. 程式人生 > >Java中的JSON序列化和反序列化 和Vo的轉換

Java中的JSON序列化和反序列化 和Vo的轉換

  1.      /** 
  2.  * 由字串反序列化成實體類  針對的是一個實體,此實體中的屬性不包括自定義的型別,如Teacher型別,或者List<Teacher>型別  
  3.  * @param source 傳入json中的字串 
  4.  * @param beanClass 實體類的型別 
  5.  * @return 實體類 
  6.  */  
  7. public static Object getObjFromJsonArrStr(String source,Class beanClass)  
  8. {  
  9.     JSONObject jsonObject = (JSONObject) JSONSerializer.toJSON(source);  
  10.     return  JSONObject.toBean(jsonObject,beanClass);          
  11. }  
  12. /** 
  13.  * 由字串反序列化成實體類  針對的是一個實體,此實體中的屬性包括自定義的型別,如Teacher型別,或者List<Teacher>型別 
  14.  * @param jsonArrStr 
  15.  * @param clazz 
  16.  * @param classMap 
  17.  * @return 
  18.  */  
  19. public static Object getObjFromJsonArrStr(String jsonArrStr, Class clazz, Map classMap)   
  20. {    
  21.     JSONObject jsonObj = JSONObject.fromObject(jsonArrStr);    
  22.                return JSONObject.toBean(jsonObj, clazz, classMap);              
  23. }  
  24. /** 
  25.  * 將string轉換成listBean 
  26.  * @param jsonArrStr 需要反序列化的字串 
  27.  * @param clazz 被反序列化之後的類 
  28.  * @return 實體list 
  29.  */  
  30. @SuppressWarnings("unchecked")  
  31. public static
     List getListFromJsonArrStr(String jsonArrStr, Class clazz) {    
  32.        JSONArray jsonArr = JSONArray.fromObject(jsonArrStr);    
  33.        List list = new ArrayList();    
  34.        for (int i = 0; i < jsonArr.size(); i++)   
  35.        {    
  36.            list.add(JSONObject.toBean(jsonArr.getJSONObject(i), clazz));    
  37.        }    
  38.        return list;    
  39.    }   
  40. /** 
  41.  * 將string轉換成listBean 屬性中包含實體類等 如List<Student> 而Student中含有屬性List<Teacher> 
  42.  * @param jsonArrStr 需要反序列化的字串 
  43.  * @param clazz 反序列化後的類 
  44.  * @param classMap 將屬性中包含的如Teacher加入到一個Map中,格式如map.put("teacher",Teacher.class) 
  45.  * @return 反序列化後的字串 
  46.  * 使用示例: 
  47.     Map classMap = new HashMap(); 
  48.     //必須要對Parent進行初始化 否則不識別 
  49.     Teacher p = new Teacher(); 
  50.     classMap.put("teacher", p.getClass()); 
  51.     List mlist = JSONTransfer.getListFromJsonArrStr(resultStr, Student.class, classMap); 
  52.  */  
  53. @SuppressWarnings("unchecked")  
  54. public static List getListFromJsonArrStr(String jsonArrStr, Class clazz, Map classMap)   
  55. {    
  56.       JSONArray jsonArr = JSONArray.fromObject(jsonArrStr);    
  57.       List list = new ArrayList();    
  58.       for (int i = 0; i < jsonArr.size(); i++)   
  59.       {              
  60.           list.add(JSONObject.toBean(jsonArr.getJSONObject(i), clazz, classMap));    
  61.       }    
  62.       return list;    
  63. }  
  64. /** 
  65.  * 序列化操作,無論是單個的物件,還是list,抑或是list中的屬性仍包含list,都可以直接序列化成String型別 
  66.  * @param obj 需要被序列化的物件 
  67.  * @return 序列化之後的字串 
  68.  */  
  69. @SuppressWarnings("unchecked")  
  70. public static String getJsonArrStrFromList(Object obj)   
  71. {   
  72.     //返回結果  
  73.     String jsonStr = null;    
  74.     //判空  
  75.        if (obj == null) {    
  76.            return "{}";    
  77.        }    
  78.        //Json配置        
  79.        JsonConfig jsonCfg = new JsonConfig();    
  80.        //註冊日期處理器    
  81.        jsonCfg.registerJsonValueProcessor(java.util.Date.class,    
  82.                new JsonDateValueProcessor(SystemConstants.DateFormat));    
  83.        //判斷是否是list  
  84.        if (obj instanceof Collection || obj instanceof Object[]) {    
  85.            jsonStr = JSONArray.fromObject(obj, jsonCfg).toString();    
  86.        } else {    
  87.            jsonStr = JSONObject.fromObject(obj, jsonCfg).toString();    
  88.        }        
  89.        return jsonStr;   
  90.    }