Json工具类

来源:互联网 发布:快手特效软件视频软件 编辑:程序博客网 时间:2024/06/05 07:28
原文链接:http://blog.163.com/beiju01@126/blog/static/36541934201041435628256/

jqGrid在处理多字段查询的时候要使用json数据,于是,参考了网上的一些写法,写了一个json工具类。其中那个时间格式化,是为了解决 json在处理java的java.util.Date出现的问题。 

代码如下: 
Java代码 复制代码
  1. @SuppressWarnings("unchecked")   
  2. public class JsonUtils {   
  3.     
  4.     
  5.     
  6.     /**  
  7.      * 从一个JSON 对象字符格式中得到一个java对象,形如:  
  8.      * {"id" : idValue, "name" : nameValue, "aBean" : {"aBeanId" : aBeanIdValue, ...}}  
  9.      * @param object  
  10.      * @param clazz  
  11.      * @return  
  12.      */  
  13.     public static Object getDTO(String jsonString, Class clazz) {   
  14.         JSONObject jsonObject = null;   
  15.         try {   
  16.             setDataFormat2JAVA();   
  17.             jsonObject = JSONObject.fromObject(jsonString);   
  18.         } catch (Exception e) {   
  19.             e.printStackTrace();   
  20.         }   
  21.         return JSONObject.toBean(jsonObject, clazz);   
  22.     }   
  23.     
  24.     /**  
  25.      * 从一个JSON 对象字符格式中得到一个java对象,其中beansList是一类的集合,形如:  
  26.      * {"id" : idValue, "name" : nameValue, "aBean" : {"aBeanId" : aBeanIdValue, ...},  
  27.      * beansList:[{}, {}, ...]}  
  28.      * @param jsonString  
  29.      * @param clazz  
  30.      * @param map 集合属性的类型 (key : 集合属性名, value : 集合属性类型class) eg: ("beansList" : Bean.class)  
  31.      * @return  
  32.      */  
  33.     public static Object getDTO(String jsonString, Class clazz, Map map) {   
  34.         JSONObject jsonObject = null;   
  35.         try {   
  36.             setDataFormat2JAVA();   
  37.             jsonObject = JSONObject.fromObject(jsonString);   
  38.         } catch (Exception e) {   
  39.             e.printStackTrace();   
  40.         }   
  41.         return JSONObject.toBean(jsonObject, clazz, map);   
  42.     }   
  43.     
  44.     /**  
  45.      * 从一个JSON数组得到一个java对象数组,形如:  
  46.      * [{"id" : idValue, "name" : nameValue}, {"id" : idValue, "name" : nameValue}, ...]  
  47.      * @param object  
  48.      * @param clazz  
  49.      * @return  
  50.      */  
  51.     public static Object[] getDTOArray(String jsonString, Class clazz) {   
  52.         setDataFormat2JAVA();   
  53.         JSONArray array = JSONArray.fromObject(jsonString);   
  54.         Object[] obj = new Object[array.size()];   
  55.         for (int i = 0; i < array.size(); i++) {   
  56.             JSONObject jsonObject = array.getJSONObject(i);   
  57.             obj[i] = JSONObject.toBean(jsonObject, clazz);   
  58.         }   
  59.         return obj;   
  60.     }   
  61.     
  62.     /**  
  63.      * 从一个JSON数组得到一个java对象数组,形如:  
  64.      * [{"id" : idValue, "name" : nameValue}, {"id" : idValue, "name" : nameValue}, ...]  
  65.      * @param object  
  66.      * @param clazz  
  67.      * @param map  
  68.      * @return  
  69.      */  
  70.     public static Object[] getDTOArray(String jsonString, Class clazz, Map map) {   
  71.         setDataFormat2JAVA();   
  72.         JSONArray array = JSONArray.fromObject(jsonString);   
  73.         Object[] obj = new Object[array.size()];   
  74.         for (int i = 0; i < array.size(); i++) {   
  75.             JSONObject jsonObject = array.getJSONObject(i);   
  76.             obj[i] = JSONObject.toBean(jsonObject, clazz, map);   
  77.         }   
  78.         return obj;   
  79.     }   
  80.     
  81.     /**  
  82.      * 从一个JSON数组得到一个java对象集合  
  83.      * @param object  
  84.      * @param clazz  
  85.      * @return  
  86.      */  
  87.     
  88.     public static List getDTOList(String jsonString, Class clazz) {   
  89.         setDataFormat2JAVA();   
  90.         JSONArray array = JSONArray.fromObject(jsonString);   
  91.         List list = new ArrayList();   
  92.         for (Iterator iter = array.iterator(); iter.hasNext();) {   
  93.             JSONObject jsonObject = (JSONObject) iter.next();   
  94.             list.add(JSONObject.toBean(jsonObject, clazz));   
  95.         }   
  96.         return list;   
  97.     }   
  98.     
  99.     /**  
  100.      * 从一个JSON数组得到一个java对象集合,其中对象中包含有集合属性  
  101.      * @param object  
  102.      * @param clazz  
  103.      * @param map 集合属性的类型  
  104.      * @return  
  105.      * class MyBean{     
  106.      *   private List data;     
  107.      *         // getters & setters     
  108.      *  }     
  109.      *      
  110.      * class Person{     
  111.      *     private String name;     
  112.      *     // getters & setters     
  113.      *  }     
  114.      *      
  115.      *  ...     
  116.      *      
  117.      *  String json = "{'data':[{'name':'Wallace'},{'name':'Grommit'}]}";     
  118.      *  Map classMap = new HashMap();     
  119.      *  classMap.put( "data", Person.class );     
  120.      *  MyBean bean = JSONObject.toBeanJSONObject.fromObject(json), MyBean.class, classMap );    
  121.      */  
  122.     public static List getDTOList(String jsonString, Class clazz, Map map) {   
  123.         setDataFormat2JAVA();   
  124.         JSONArray array = JSONArray.fromObject(jsonString);   
  125.         List list = new ArrayList();   
  126.         for (Iterator iter = array.iterator(); iter.hasNext();) {   
  127.             JSONObject jsonObject = (JSONObject) iter.next();   
  128.             list.add(JSONObject.toBean(jsonObject, clazz, map));   
  129.         }   
  130.         return list;   
  131.     }   
  132.     
  133.     /**  
  134.      * 从json HASH表达式中获取一个map,该map支持嵌套功能  
  135.      * 形如:{"id" : "johncon", "name" : "小强"}  
  136.      * 注意commons-collections版本,必须包含org.apache.commons.collections.map.MultiKeyMap  
  137.      * @param object  
  138.      * @return  
  139.      */  
  140.     public static Map getMapFromJson(String jsonString) {   
  141.         setDataFormat2JAVA();   
  142.         JSONObject jsonObject = JSONObject.fromObject(jsonString);   
  143.         Map map = new HashMap();   
  144.         for (Iterator iter = jsonObject.keys(); iter.hasNext();) {   
  145.             String key = (String) iter.next();   
  146.             map.put(key, jsonObject.get(key));   
  147.         }   
  148.         return map;   
  149.     }   
  150.     
  151.     /**  
  152.      * 从json数组中得到相应java数组  
  153.      * json形如:["123", "456"]  
  154.      * @param jsonString  
  155.      * @return  
  156.      */  
  157.     public static Object[] getObjectArrayFromJson(String jsonString) {   
  158.         JSONArray jsonArray = JSONArray.fromObject(jsonString);   
  159.         return jsonArray.toArray();   
  160.     }   
  161.     
  162.     /**  
  163.      * 把数据对象转换成json字符串  
  164.      * DTO对象形如:{"id" : idValue, "name" : nameValue, ...}  
  165.      * 数组对象形如:[{}, {}, {}, ...]  
  166.      * map对象形如:{key1 : {"id" : idValue, "name" : nameValue, ...}, key2 : {}, ...} 
  167.      * @param object  
  168.      * @return  
  169.      */  
  170.     public static String getJSONString(Object object) throws Exception {   
  171.         String jsonString = null;   
  172.         //日期值处理器   
  173.         JsonConfig jsonConfig = new JsonConfig();   
  174.         jsonConfig.registerJsonValueProcessor(java.util.Date.class,   
  175.                 new JsonDateValueProcessor());   
  176.         if (object != null) {   
  177.             if (object instanceof Collection || object instanceof Object[]) {   
  178.                 jsonString = JSONArray.fromObject(object, jsonConfig)   
  179.                         .toString();   
  180.             } else {   
  181.                 jsonString = JSONObject.fromObject(object, jsonConfig)   
  182.                         .toString();   
  183.             }   
  184.         }   
  185.         return jsonString == null ? "{}" : jsonString;   
  186.     }   
  187.     
  188.     private static void setDataFormat2JAVA() {   
  189.         //设定日期转换格式   
  190.         JSONUtils.getMorpherRegistry().registerMorpher(   
  191.                 new DateMorpher(new String[] { "yyyy-MM-dd",   
  192.                         "yyyy-MM-dd HH:mm:ss" }));   
  193.     }   
  194.     
  195.     public static void main(String[] arg) throws Exception {   
  196.         String s = "{status : 'success'}";   
  197.         System.out.println(" object : " + JsonUtils.getJSONString(s));   
  198.     }   
  199. }   
  200.   
  201. public class JsonDateValueProcessor implements JsonValueProcessor {   
  202.     
  203.     private String format = "yyyy-MM-dd HH:mm:ss";   
  204.     
  205.     public JsonDateValueProcessor() {   
  206.     
  207.     }   
  208.     
  209.     public JsonDateValueProcessor(String format) {   
  210.         this.format = format;   
  211.     }   
  212.     
  213.     public Object processArrayValue(Object value, JsonConfig jsonConfig) {   
  214.         return process(value, jsonConfig);   
  215.     }   
  216.     
  217.     public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {   
  218.         return process(value, jsonConfig);   
  219.     }   
  220.     
  221.     private Object process( Object value, JsonConfig jsonConfig ) {   
  222.         if (value instanceof Date) {   
  223.             String str = new SimpleDateFormat(format).format((Date) value);   
  224.             return str;   
  225.         }   
  226.         return value == null ? null : value.toString();   
  227.     }   
  228.     
  229.     public String getFormat() {   
  230.         return format;   
  231.     }   
  232.     
  233.     public void setFormat(String format) {   
  234.         this.format = format;   
  235.     }   
  236.     
  237. }  
0 0
原创粉丝点击