1. 程式人生 > >在JAVA中封裝JSONUtils工具類及使用

在JAVA中封裝JSONUtils工具類及使用

  1. import java.util.ArrayList;
  2. import java.util.Collection;
  3. import java.util.HashMap;
  4. import java.util.Iterator;
  5. import java.util.List;
  6. import java.util.Map;
  7. import net.sf.json.JSONArray;
  8. import net.sf.json.JSONObject;
  9. import org.apache.commons.beanutils.BeanUtils;
  10. public class JSONUtils
  11. {
  12.     /**
  13.      * 
  14.      * @author wangwei JSON工具類
  15.      * @param 
  16.      * 
  17.      */
  18.     /***
  19.      * 將List物件序列化為JSON文字
  20.      */
  21.     public static <T> String toJSONString(List<T> list)
  22.     {
  23.         JSONArray jsonArray = JSONArray.fromObject(list);
  24.         return jsonArray.toString();
  25.     }
  26.     /***
  27.      * 將物件序列化為JSON文字
  28.      * @param object
  29.      * @return
  30.      */
  31.     public static String toJSONString(Object object)
  32.     {
  33.         JSONArray jsonArray = JSONArray.fromObject(object);
  34.         return jsonArray.toString();
  35.     }
  36.     /***
  37.      * 將JSON物件陣列序列化為JSON文字
  38.      * @param jsonArray
  39.      * @return
  40.      */
  41.     public static
     String toJSONString(JSONArray jsonArray)
  42.     {
  43.         return jsonArray.toString();
  44.     }
  45.     /***
  46.      * 將JSON物件序列化為JSON文字
  47.      * @param jsonObject
  48.      * @return
  49.      */
  50.     public static String toJSONString(JSONObject jsonObject)
  51.     {
  52.         return jsonObject.toString();
  53.     } 
  54.     /***
  55.      * 將物件轉換為List物件
  56.      * @param object
  57.      * @return
  58.      */
  59.     public static List toArrayList(Object object)
  60.     {
  61.         List arrayList = new ArrayList();
  62.         JSONArray jsonArray = JSONArray.fromObject(object);
  63.         Iterator it = jsonArray.iterator();
  64.         while (it.hasNext())
  65.         {
  66.             JSONObject jsonObject = (JSONObject) it.next();
  67.             Iterator keys = jsonObject.keys();
  68.             while (keys.hasNext())
  69.             {
  70.                 Object key = keys.next();
  71.                 Object value = jsonObject.get(key);
  72.                 arrayList.add(value);
  73.             }
  74.         }
  75.         return arrayList;
  76.     }
  77.     /***
  78.      * 將物件轉換為Collection物件
  79.      * @param object
  80.      * @return
  81.      */
  82.     public static Collection toCollection(Object object)
  83.     {
  84.         JSONArray jsonArray = JSONArray.fromObject(object);
  85.         return JSONArray.toCollection(jsonArray);
  86.     }
  87.     /***
  88.      * 將物件轉換為JSON物件陣列
  89.      * @param object
  90.      * @return
  91.      */
  92.     public static JSONArray toJSONArray(Object object)
  93.     {
  94.         return JSONArray.fromObject(object);
  95.     }
  96.     /***
  97.      * 將物件轉換為JSON物件
  98.      * @param object
  99.      * @return
  100.      */
  101.     public static JSONObject toJSONObject(Object object)
  102.     {
  103.         return JSONObject.fromObject(object);
  104.     }
  105.     /***
  106.      * 將物件轉換為HashMap
  107.      * @param object
  108.      * @return
  109.      */
  110.     public static HashMap toHashMap(Object object)
  111.     {
  112.         HashMap<String, Object> data = new HashMap<String, Object>();
  113.         JSONObject jsonObject = JSONUtils.toJSONObject(object);
  114.         Iterator it = jsonObject.keys();
  115.         while (it.hasNext())
  116.         {
  117.             String key = String.valueOf(it.next());
  118.             Object value = jsonObject.get(key);
  119.             data.put(key, value);
  120.         }
  121.         return data;
  122.     }
  123.     /***
  124.      * 將物件轉換為List<map>
  125.      * @param object
  126.      * @return
  127.      */
  128.     // 返回非實體型別(Map)的List
  129.     public static List<Map<String, Object>> toList(Object object)
  130.     {
  131.         List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
  132.         JSONArray jsonArray = JSONArray.fromObject(object);
  133.         for (Object obj : jsonArray)
  134.         {
  135.             JSONObject jsonObject = (JSONObject) obj;
  136.             Map<String, Object> map = new HashMap<String, Object>();
  137.             Iterator it = jsonObject.keys();
  138.             while (it.hasNext())
  139.             {
  140.                 String key = (String) it.next();
  141.                 Object value = jsonObject.get(key);
  142.                 map.put((String) key, value);
  143.             }
  144.             list.add(map);
  145.         }
  146.         return list;
  147.     }
  148.     /***
  149.      * 將JSON物件陣列轉換為傳入型別的List
  150.      * @param 
  151.      * @param jsonArray
  152.      * @param objectClass
  153.      * @return
  154.      */
  155.     public static <T> List<T> toList(JSONArray jsonArray, Class<T> objectClass)
  156.     {
  157.         return JSONArray.toList(jsonArray, objectClass);
  158.     }
  159.     /***
  160.      * 將物件轉換為傳入型別的List
  161.      * @param 
  162.      * @param jsonArray
  163.      * @param objectClass
  164.      * @return
  165.      */
  166.     public static <T> List<T> toList(Object object, Class<T> objectClass)
  167.     {
  168.         JSONArray jsonArray = JSONArray.fromObject(object);
  169.         return JSONArray.toList(jsonArray, objectClass);
  170.     }
  171.     /***
  172.      * 將JSON物件轉換為傳入型別的物件
  173.      * @param 
  174.      * @param jsonObject
  175.      * @param beanClass
  176.      * @return
  177.      */
  178.     public static <T> T toBean(JSONObject jsonObject, Class<T> beanClass)
  179.     {
  180.         return (T) JSONObject.toBean(jsonObject, beanClass);
  181.     }
  182.     /***
  183.      * 將將物件轉換為傳入型別的物件
  184.      * @param 
  185.      * @param object
  186.      * @param beanClass
  187.      * @return
  188.      */
  189.     public static <T> T toBean(Object object, Class<T> beanClass)
  190.     {
  191.         JSONObject jsonObject = JSONObject.fromObject(object);
  192.         return (T) JSONObject.toBean(jsonObject, beanClass);
  193.     }
  194.     /***
  195.      * 將JSON文字反序列化為主從關係的實體
  196.      * @param 泛型T 代表主實體型別
  197.      * @param 泛型D 代表從實體型別
  198.      * @param jsonString JSON文字
  199.      * @param mainClass 主實體型別
  200.      * @param detailName 從實體類在主實體類中的屬性名稱
  201.      * @param detailClass 從實體型別
  202.      * @return
  203.      */
  204.     public static <T, D> T toBean(String jsonString, Class<T> mainClass,
  205.             String detailName, Class<D> detailClass)
  206.     {
  207.         JSONObject jsonObject = JSONObject.fromObject(jsonString);
  208.         JSONArray jsonArray = (JSONArray) jsonObject.get(detailName);
  209.         T mainEntity = JSONUtils.toBean(jsonObject, mainClass);
  210.         List<D> detailList = JSONUtils.toList(jsonArray, detailClass);
  211.         try
  212.         {
  213.             BeanUtils.setProperty(mainEntity, detailName, detailList);
  214.         }
  215.         catch (Exception ex)
  216.         {
  217.             throw new RuntimeException("主從關係JSON反序列化實體失敗!");
  218.         }
  219.         return mainEntity;
  220.     }
  221.     /***
  222.      * 將JSON文字反序列化為主從關係的實體
  223.      * @param 泛型T 代表主實體型別
  224.      * @param 泛型D1 代表從實體型別
  225.      * @param 泛型D2 代表從實體型別
  226.      * @param jsonString JSON文字
  227.      * @param mainClass 主實體型別
  228.      * @param detailName1 從實體類在主實體類中的屬性
  229.      * @param detailClass1 從實體型別
  230.      * @param detailName2 從實體類在主實體類中的屬性
  231.      * @param detailClass2 從實體型別
  232.      * @return
  233.      */
  234.     public static <T, D1, D2> T toBean(String jsonString, Class<T> mainClass,
  235.             String detailName1, Class<D1> detailClass1, String detailName2,
  236.             Class<D2> detailClass2)
  237.     {
  238.         JSONObject jsonObject = JSONObject.fromObject(jsonString);
  239.         JSONArray jsonArray1 = (JSONArray) jsonObject.get(detailName1);
  240.         JSONArray jsonArray2 = (JSONArray) jsonObject.get(detailName2);
  241.         T mainEntity = JSONUtils.toBean(jsonObject, mainClass);
  242.         List<D1> detailList1 = JSONUtils.toList(jsonArray1, detailClass1);
  243.         List<D2> detailList2 = JSONUtils.toList(jsonArray2, detailClass2);
  244.         try
  245.         {
  246.             BeanUtils.setProperty(mainEntity, detailName1, detailList1);
  247.             BeanUtils.setProperty(mainEntity, detailName2, detailList2);
  248.         }
  249.         catch (Exception ex)
  250.         {
  251.             throw new RuntimeException("主從關係JSON反序列化實體失敗!");
  252.         }
  253.         return mainEntity;
  254.     }
  255.     /***
  256.      * 將JSON文字反序列化為主從關係的實體
  257.      * @param 泛型T 代表主實體型別
  258.      * @param 泛型D1 代表從實體型別
  259.      * @param 泛型D2 代表從實體型別
  260.      * @param jsonString JSON文字
  261.      * @param mainClass 主實體型別
  262.      * @param detailName1 從實體類在主實體類中的屬性
  263.      * @param detailClass1 從實體型別
  264.      * @param detailName2 從實體類在主實體類中的屬性
  265.      * @param detailClass2 從實體型別
  266.      * @param detailName3 從實體類在主實體類中的屬性
  267.      * @param detailClass3 從實體型別
  268.      * @return
  269.      */
  270.     public static <T, D1, D2, D3> T toBean(String jsonString,
  271.             Class<T> mainClass, String detailName1, Class<D1> detailClass1,
  272.             String detailName2, Class<D2> detailClass2, String detailName3,
  273.             Class<D3> detailClass3)
  274.     {
  275.         JSONObject jsonObject = JSONObject.fromObject(jsonString);
  276.         JSONArray jsonArray1 = (JSONArray) jsonObject.get(detailName1);
  277.         JSONArray jsonArray2 = (JSONArray) jsonObject.get(detailName2);
  278.         JSONArray jsonArray3 = (JSONArray) jsonObject.get(detailName3);
  279.         T mainEntity = JSONUtils.toBean(jsonObject, mainClass);
  280.         List<D1> detailList1 = JSONUtils.toList(jsonArray1, detailClass1);
  281.         List<D2> detailList2 = JSONUtils.toList(jsonArray2, detailClass2);
  282.         List<D3> detailList3 = JSONUtils.toList(jsonArray3, detailClass3);
  283.         try
  284.         {
  285.             BeanUtils.setProperty(mainEntity, detailName1, detailList1);
  286.             BeanUtils.setProperty(mainEntity, detailName2, detailList2);
  287.             BeanUtils.setProperty(mainEntity, detailName3, detailList3);
  288.         }
  289.         catch (Exception ex)
  290.         {
  291.             throw new RuntimeException("主從關係JSON反序列化實體失敗!");
  292.         }
  293.         return mainEntity;
  294.     }
  295.     /***
  296.      * 將JSON文字反序列化為主從關係的實體
  297.      * @param 主實體型別
  298.      * @param jsonString JSON文字
  299.      * @param mainClass 主實體型別
  300.      * @param detailClass 存放了多個從實體在主實體中屬性名稱和型別
  301.      * @return
  302.      */
  303.     public static <T> T toBean(