在JAVA中封装JSONUtils工具类及使用

12 篇文章 0 订阅
在JAVA中封装JSONUtils工具类及使用 


在JAVA中用json-lib-2.3-jdk15.jar包中提供了JSONObject和JSONArray基类,用于JSON的序列化和反序列化的操作。但是我们更习惯将其进一步封装,达到更好的重用。

封装后的JSON工具类JSONUtils.java代码如下:

  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.     /***
  20.      * 将List对象序列化为JSON文本
  21.      */
  22.     public static <T> String toJSONString(List<T> list)
  23.     {
  24.         JSONArray jsonArray = JSONArray.fromObject(list);

  25.         return jsonArray.toString();
  26.     }
  27.     
  28.     /***
  29.      * 将对象序列化为JSON文本
  30.      * @param object
  31.      * @return
  32.      */
  33.     public static String toJSONString(Object object)
  34.     {
  35.         JSONArray jsonArray = JSONArray.fromObject(object);

  36.         return jsonArray.toString();
  37.     }

  38.     /***
  39.      * 将JSON对象数组序列化为JSON文本
  40.      * @param jsonArray
  41.      * @return
  42.      */
  43.     public static String toJSONString(JSONArray jsonArray)
  44.     {
  45.         return jsonArray.toString();
  46.     }

  47.     /***
  48.      * 将JSON对象序列化为JSON文本
  49.      * @param jsonObject
  50.      * @return
  51.      */
  52.     public static String toJSONString(JSONObject jsonObject)
  53.     {
  54.         return jsonObject.toString();
  55.     }
  56.     
  57.     /***
  58.      * 将对象转换为List对象
  59.      * @param object
  60.      * @return
  61.      */
  62.     public static List toArrayList(Object object)
  63.     {
  64.         List arrayList = new ArrayList();

  65.         JSONArray jsonArray = JSONArray.fromObject(object);

  66.         Iterator it = jsonArray.iterator();
  67.         while (it.hasNext())
  68.         {
  69.             JSONObject jsonObject = (JSONObject) it.next();

  70.             Iterator keys = jsonObject.keys();
  71.             while (keys.hasNext())
  72.             {
  73.                 Object key = keys.next();
  74.                 Object value = jsonObject.get(key);
  75.                 arrayList.add(value);
  76.             }
  77.         }

  78.         return arrayList;
  79.     }

  80.     /***
  81.      * 将对象转换为Collection对象
  82.      * @param object
  83.      * @return
  84.      */
  85.     public static Collection toCollection(Object object)
  86.     {
  87.         JSONArray jsonArray = JSONArray.fromObject(object);

  88.         return JSONArray.toCollection(jsonArray);
  89.     }

  90.     /***
  91.      * 将对象转换为JSON对象数组
  92.      * @param object
  93.      * @return
  94.      */
  95.     public static JSONArray toJSONArray(Object object)
  96.     {
  97.         return JSONArray.fromObject(object);
  98.     }

  99.     /***
  100.      * 将对象转换为JSON对象
  101.      * @param object
  102.      * @return
  103.      */
  104.     public static JSONObject toJSONObject(Object object)
  105.     {
  106.         return JSONObject.fromObject(object);
  107.     }

  108.     /***
  109.      * 将对象转换为HashMap
  110.      * @param object
  111.      * @return
  112.      */
  113.     public static HashMap toHashMap(Object object)
  114.     {
  115.         HashMap<String, Object> data = new HashMap<String, Object>();
  116.         JSONObject jsonObject = JSONUtils.toJSONObject(object);
  117.         Iterator it = jsonObject.keys();
  118.         while (it.hasNext())
  119.         {
  120.             String key = String.valueOf(it.next());
  121.             Object value = jsonObject.get(key);
  122.             data.put(key, value);
  123.         }

  124.         return data;
  125.     }

  126.     /***
  127.      * 将对象转换为List>
  128.      * @param object
  129.      * @return
  130.      */
  131.     // 返回非实体类型(Map)的List
  132.     public static List<Map<String, Object>> toList(Object object)
  133.     {
  134.         List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
  135.         JSONArray jsonArray = JSONArray.fromObject(object);
  136.         for (Object obj : jsonArray)
  137.         {
  138.             JSONObject jsonObject = (JSONObject) obj;
  139.             Map<String, Object> map = new HashMap<String, Object>();
  140.             Iterator it = jsonObject.keys();
  141.             while (it.hasNext())
  142.             {
  143.                 String key = (String) it.next();
  144.                 Object value = jsonObject.get(key);
  145.                 map.put((String) key, value);
  146.             }
  147.             list.add(map);
  148.         }
  149.         return list;
  150.     }

  151.     /***
  152.      * 将JSON对象数组转换为传入类型的List
  153.      * @param
  154.      * @param jsonArray
  155.      * @param objectClass
  156.      * @return
  157.      */
  158.     public static <T> List<T> toList(JSONArray jsonArray, Class<T> objectClass)
  159.     {
  160.         return JSONArray.toList(jsonArray, objectClass);
  161.     }

  162.     /***
  163.      * 将对象转换为传入类型的List
  164.      * @param
  165.      * @param jsonArray
  166.      * @param objectClass
  167.      * @return
  168.      */
  169.     public static <T> List<T> toList(Object object, Class<T> objectClass)
  170.     {
  171.         JSONArray jsonArray = JSONArray.fromObject(object);

  172.         return JSONArray.toList(jsonArray, objectClass);
  173.     }

  174.     /***
  175.      * 将JSON对象转换为传入类型的对象
  176.      * @param
  177.      * @param jsonObject
  178.      * @param beanClass
  179.      * @return
  180.      */
  181.     public static <T> T toBean(JSONObject jsonObject, Class<T> beanClass)
  182.     {
  183.         return (T) JSONObject.toBean(jsonObject, beanClass);
  184.     }

  185.     /***
  186.      * 将将对象转换为传入类型的对象
  187.      * @param
  188.      * @param object
  189.      * @param beanClass
  190.      * @return
  191.      */
  192.     public static <T> T toBean(Object object, Class<T> beanClass)
  193.     {
  194.         JSONObject jsonObject = JSONObject.fromObject(object);

  195.         return (T) JSONObject.toBean(jsonObject, beanClass);
  196.     }

  197.     /***
  198.      * 将JSON文本反序列化为主从关系的实体
  199.      * @param 泛型T 代表主实体类型
  200.      * @param 泛型D 代表从实体类型
  201.      * @param jsonString JSON文本
  202.      * @param mainClass 主实体类型
  203.      * @param detailName 从实体类在主实体类中的属性名称
  204.      * @param detailClass 从实体类型
  205.      * @return
  206.      */
  207.     public static <T, D> T toBean(String jsonString, Class<T> mainClass,
  208.             String detailName, Class<D> detailClass)
  209.     {
  210.         JSONObject jsonObject = JSONObject.fromObject(jsonString);
  211.         JSONArray jsonArray = (JSONArray) jsonObject.get(detailName);

  212.         T mainEntity = JSONUtils.toBean(jsonObject, mainClass);
  213.         List<D> detailList = JSONUtils.toList(jsonArray, detailClass);

  214.         try
  215.         {
  216.             BeanUtils.setProperty(mainEntity, detailName, detailList);
  217.         }
  218.         catch (Exception ex)
  219.         {
  220.             throw new RuntimeException("主从关系JSON反序列化实体失败!");
  221.         }

  222.         return mainEntity;
  223.     }

  224.     /***
  225.      * 将JSON文本反序列化为主从关系的实体
  226.      * @param 泛型T 代表主实体类型
  227.      * @param 泛型D1 代表从实体类型
  228.      * @param 泛型D2 代表从实体类型
  229.      * @param jsonString JSON文本
  230.      * @param mainClass 主实体类型
  231.      * @param detailName1 从实体类在主实体类中的属性
  232.      * @param detailClass1 从实体类型
  233.      * @param detailName2 从实体类在主实体类中的属性
  234.      * @param detailClass2 从实体类型
  235.      * @return
  236.      */
  237.     public static <T, D1, D2> T toBean(String jsonString, Class<T> mainClass,
  238.             String detailName1, Class<D1> detailClass1, String detailName2,
  239.             Class<D2> detailClass2)
  240.     {
  241.         JSONObject jsonObject = JSONObject.fromObject(jsonString);
  242.         JSONArray jsonArray1 = (JSONArray) jsonObject.get(detailName1);
  243.         JSONArray jsonArray2 = (JSONArray) jsonObject.get(detailName2);

  244.         T mainEntity = JSONUtils.toBean(jsonObject, mainClass);
  245.         List<D1> detailList1 = JSONUtils.toList(jsonArray1, detailClass1);
  246.         List<D2> detailList2 = JSONUtils.toList(jsonArray2, detailClass2);

  247.         try
  248.         {
  249.             BeanUtils.setProperty(mainEntity, detailName1, detailList1);
  250.             BeanUtils.setProperty(mainEntity, detailName2, detailList2);
  251.         }
  252.         catch (Exception ex)
  253.         {
  254.             throw new RuntimeException("主从关系JSON反序列化实体失败!");
  255.         }

  256.         return mainEntity;
  257.     }
  258.     
  259.     /***
  260.      * 将JSON文本反序列化为主从关系的实体
  261.      * @param 泛型T 代表主实体类型
  262.      * @param 泛型D1 代表从实体类型
  263.      * @param 泛型D2 代表从实体类型
  264.      * @param jsonString JSON文本
  265.      * @param mainClass 主实体类型
  266.      * @param detailName1 从实体类在主实体类中的属性
  267.      * @param detailClass1 从实体类型
  268.      * @param detailName2 从实体类在主实体类中的属性
  269.      * @param detailClass2 从实体类型
  270.      * @param detailName3 从实体类在主实体类中的属性
  271.      * @param detailClass3 从实体类型
  272.      * @return
  273.      */
  274.     public static <T, D1, D2, D3> T toBean(String jsonString,
  275.             Class<T> mainClass, String detailName1, Class<D1> detailClass1,
  276.             String detailName2, Class<D2> detailClass2, String detailName3,
  277.             Class<D3> detailClass3)
  278.     {
  279.         JSONObject jsonObject = JSONObject.fromObject(jsonString);
  280.         JSONArray jsonArray1 = (JSONArray) jsonObject.get(detailName1);
  281.         JSONArray jsonArray2 = (JSONArray) jsonObject.get(detailName2);
  282.         JSONArray jsonArray3 = (JSONArray) jsonObject.get(detailName3);

  283.         T mainEntity = JSONUtils.toBean(jsonObject, mainClass);
  284.         List<D1> detailList1 = JSONUtils.toList(jsonArray1, detailClass1);
  285.         List<D2> detailList2 = JSONUtils.toList(jsonArray2, detailClass2);
  286.         List<D3> detailList3 = JSONUtils.toList(jsonArray3, detailClass3);

  287.         try
  288.         {
  289.             BeanUtils.setProperty(mainEntity, detailName1, detailList1);
  290.             BeanUtils.setProperty(mainEntity, detailName2, detailList2);
  291.             BeanUtils.setProperty(mainEntity, detailName3, detailList3);
  292.         }
  293.         catch (Exception ex)
  294.         {
  295.             throw new RuntimeException("主从关系JSON反序列化实体失败!");
  296.         }

  297.         return mainEntity;
  298.     }

  299.     /***
  300.      * 将JSON文本反序列化为主从关系的实体
  301.      * @param 主实体类型
  302.      * @param jsonString JSON文本
  303.      * @param mainClass 主实体类型
  304.      * @param detailClass 存放了多个从实体在主实体中属性名称和类型
  305.      * @return
  306.      */
  307.     public static <T> T toBean(String jsonString, Class<T> mainClass,
  308.             HashMap<String, Class> detailClass)
  309.     {
  310.         JSONObject jsonObject = JSONObject.fromObject(jsonString);
  311.         T mainEntity = JSONUtils.toBean(jsonObject, mainClass);
  312.         for (Object key : detailClass.keySet())
  313.         {
  314.             try
  315.             {
  316.                 Class value = (Class) detailClass.get(key);
  317.                 BeanUtils.setProperty(mainEntity, key.toString(), value);
  318.             }
  319.             catch (Exception ex)
  320.             {
  321.                 throw new RuntimeException("主从关系JSON反序列化实体失败!");
  322.             }
  323.         }
  324.         return mainEntity;
  325.     }
  326. }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package com.json; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import net.sf.ezmorph.object.DateMorpher; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import net.sf.json.JsonConfig; import net.sf.json.processors.JsonValueProcessor; import net.sf.json.util.CycleDetectionStrategy; import net.sf.json.util.JSONUtils; public class TestJsonServlet { /** * 从一个JSON 对象字符格式得到一个java对象 * * @param jsonString * @param pojoCalss * @return */ @SuppressWarnings("unchecked") public static <T> T jsonToObject(String jsonString, Class<T> pojoCalss) { Object pojo; JSONObject jsonObject = JSONObject.fromObject(jsonString); pojo = JSONObject.toBean(jsonObject, pojoCalss); return (T) pojo; } /** * json字符串转换成集合 * * @param jsonString * @param pojoClass * @return */ @SuppressWarnings("unchecked") public static <T> List<T> jsonToList(String jsonString, Class<T> pojoClass) { JSONArray jsonArray = JSONArray.fromObject(jsonString); JSONObject jsonObject; Object pojoValue; List<T> list = new ArrayList<T>(); for (int i = 0; i < jsonArray.size(); i++) { jsonObject = jsonArray.getJSONObject(i); pojoValue = JSONObject.toBean(jsonObject, pojoClass); list.add((T) pojoValue); } return list; } /** * json字符串转换成集合 * * @param jsonString * @param pojoClass * @return */ @SuppressWarnings("unchecked") public static <T> List<T> jsonToList(String jsonString, Class<T> pojoClass, String dataFormat) { JsonConfig jsonConfig = configJson(dataFormat); JSONArray jsonArray = JSONArray.fromObject(jsonString, jsonConfig); JSONObject jsonObject; Object pojoValue; List<T> list = new ArrayList<T>(); for (int i = 0; i < jsonArray.size(); i++) { jsonObject = jsonArray.getJSONObject(i); pojoValue = JSONObject.toBean(jsonObject, pojoClass); list.add((T) pojoValue); } return list; } /** * 将java对象转换成json字符串 * * @param javaObj * @return */ public static String objectToJson(Object javaObj) { JSONObject json; json = JSONObject.fromObject(javaObj); return json.toString(); } /** * 将java对象转换成json字符串,并设定日期格式 * * @param javaObj * 要转换的java对象 * @param dataFormat * 制定的日期格式 * @return */ public static String objectToJson(Object javaObj, String dataFormat) { JSONObject json; JsonConfig jsonConfig = configJson(dataFormat); json = JSONObject.fromObject(javaObj, jsonConfig); return json.toString(); } /** * list变成json * * @param list * @return */ public static <T> String listToJson(List<T> list) { JSONArray json; json = JSONArray.fromObject(list); return json.toString(); } /** * list变成json * * @param list * @return */ public static <T> String listToJson(List<T> list, String dataFormat) { JSONArray json; JsonConfig jsonConfig = configJson(dataFormat); json = JSONArray.fromObject(list, jsonConfig); return json.toString(); } /** * JSON 时间解析器 * * @param datePattern * @return */ public static JsonConfig configJson(final String datePattern) { JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[] { datePattern })); JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setIgnoreDefaultExcludes(false); jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT); jsonConfig.registerJsonValueProcessor(Date.class, new JsonValueProcessor() { @Override public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) { if (value instanceof Date) { String str = new SimpleDateFormat(datePattern).format((Date) value); return str; } return value == null ? null : value.toString(); } @Override public Object processArrayValue(Object value, JsonConfig jsonConfig) { String[] obj = {}; if (value instanceof Date[]) { SimpleDateFormat sf = new SimpleDateFormat(datePattern); Date[] dates = (Date[]) value; obj = new String[dates.length]; for (int i = 0; i < dates.length; i++) { obj[i] = sf.format(dates[i]); } } return obj; } }); return jsonConfig; } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值