JSON和java对象互转

来源:互联网 发布:python input split 编辑:程序博客网 时间:2024/06/05 00:28

 

//data为页面JSON格式的对象数据

BaseInfoPojo jsonBaseInfoPojo = (BaseInfoPojo) JsonUtil.getDTO(data,
    BaseInfoPojo.class);

 

 

public class JsonUtil {         
    /** 
     * 从一个JSON 对象字符格式中得到一个java对象,形如:  
     * @param jsonString json字符
     * @param clazz  转换java对象的class
     * @return  返回java对象
     */ 
    public static Object getDTO(String jsonString, Class clazz){  
        JSONObject jsonObject = null;   
        setDataFormat2JAVA();   
        jsonObject = JSONObject.fromObject(jsonString);  
        return JSONObject.toBean(jsonObject, clazz);  
    }  
      
    /** 
     * 从一个JSON 对象字符格式中得到一个java对象,其中beansList是一类的集合,形如: 
     * {"id" : idValue, "name" : nameValue, "aBean" : {"aBeanId" : aBeanIdValue, ...}, 
     * beansList:[{}, {}, ...]} 
     * @param jsonString  json字符
     * @param clazz  转换java对象的class
     * @param map 属�?的类�?(key : 属�?�? value : 属�?类型class,如果该属性是集合,则是集合中对象的属�?类型) eg: ("beansList" : Bean.class) 
     * @return  返回java对象
     */ 
    public static Object getDTO(String jsonString, Class clazz, Map map){  
        JSONObject jsonObject = null;    
        setDataFormat2JAVA();   
        jsonObject = JSONObject.fromObject(jsonString);  
        return JSONObject.toBean(jsonObject, clazz, map);  
    }  
      
    /** 
     * 从一个JSON数组得到�?��java对象数组,形如: 
     * [{"id" : idValue, "name" : nameValue}, {"id" : idValue, "name" : nameValue}, ...] 
     * @param jsonString  json字符�?
     * @param clazz  转换java对象的class
     * @return  java对象数组
     */ 
    public static Object[] getDTOArray(String jsonString, Class clazz){  
        setDataFormat2JAVA();  
        JSONArray array = JSONArray.fromObject(jsonString);  
        Object[] obj = new Object[array.size()];  
        for(int i = 0; i < array.size(); i++){  
            JSONObject jsonObject = array.getJSONObject(i);  
            obj[i] = JSONObject.toBean(jsonObject, clazz);  
        }  
        return obj;  
    }  
      
    /** 
     * 从一个JSON数组得到�?��java对象数组,形如: 
     * [{"id" : idValue, "name" : nameValue}, {"id" : idValue, "name" : nameValue}, ...] 
     * @param jsonString  json字符�?
     * @param clazz  转换java对象的class
     * @param map  属�?的类�?(key : 属�?�? value : 属�?类型class,如果该属性是集合,则是集合中对象的属�?类型)
     * @return  java对象数组
     */ 
    public static Object[] getDTOArray(String jsonString, Class clazz, Map map){  
        setDataFormat2JAVA();  
        JSONArray array = JSONArray.fromObject(jsonString);  
        Object[] obj = new Object[array.size()];  
        for(int i = 0; i < array.size(); i++){  
            JSONObject jsonObject = array.getJSONObject(i);  
            obj[i] = JSONObject.toBean(jsonObject, clazz, map);  
        }  
        return obj;  
    }  
      
    /** 
     * 从一个JSON数组得到�?��java对象集合 
     * @param jsonString  json字符�?
     * @param clazz  转换java对象的class
     * @return  包含java对象的list
     */ 
    public static List getDTOList(String jsonString, Class clazz){  
        setDataFormat2JAVA();  
        JSONArray array = JSONArray.fromObject(jsonString);  
        List list = new ArrayList();  
        for(Iterator iter = array.iterator(); iter.hasNext();){  
            JSONObject jsonObject = (JSONObject)iter.next();  
            list.add(JSONObject.toBean(jsonObject, clazz));  
        }  
        return list;  
    }  
      
    /** 
     * 从一个JSON数组得到�?��java对象集合,其中对象中包含有集合属�?
     * @param jsonString  json字符�?
     * @param clazz  转换java对象的class
     * @param map 属�?的类�?(key : 属�?�? value : 属�?类型class,如果该属性是集合,则是集合中对象的属�?类型)
     * @return  包含java对象的list
     */ 
    public static List getDTOList(String jsonString, Class clazz, Map map){  
        setDataFormat2JAVA();  
        JSONArray array = JSONArray.fromObject(jsonString);  
        List list = new ArrayList();  
        for(Iterator iter = array.iterator(); iter.hasNext();){  
            JSONObject jsonObject = (JSONObject)iter.next();  
            list.add(JSONObject.toBean(jsonObject, clazz, map));  
        }  
        return list;  
    }  
      
    /** 
     * 从json HASH表达式中获取对应的map,该map支持嵌套功能 
     * 形如:{"id" : "johncon", "name" : "小强"} 
     * 注意commons-collections版本,必须包含org.apache.commons.collections.map.MultiKeyMap 
     * @param jsonString  json字符�?
     * @return  返回java.util.Map
     */ 
    public static Map getMapFromJson(String jsonString) {  
        setDataFormat2JAVA();  
        JSONObject jsonObject = JSONObject.fromObject(jsonString);  
        Map map = new HashMap();  
        for(Iterator iter = jsonObject.keys(); iter.hasNext();){  
            String key = (String)iter.next();  
            map.put(key, jsonObject.get(key));  
        }  
        return map;  
    }  
      
    /** 
     * 从json数组中得到相应java数组  (json中是java基本的数据对象类型
     * json形如:["123", "456"] 
     * @param jsonString  json字符串
     * @return  基本数据对象数组
     */ 
    public static Object[] getObjectArrayFromJson(String jsonString) {
      setDataFormat2JAVA();  
        JSONArray jsonArray = JSONArray.fromObject(jsonString);  
        return jsonArray.toArray();  
    }  
 
 
    /** 
     * 把数据对象转换成json字符串
     * DTO对象形如:{"id" : idValue, "name" : nameValue, ...} 
     * 数组对象形如:[{}, {}, {}, ...] 
     * map对象形如:{key1 : {"id" : idValue, "name" : nameValue, ...}, key2 : {}, ...} 
     * @param object  java的任何对象
     * @return  json格式字符串
     */ 
    public static String getJSONString(Object object) throws Exception{  
     String jsonString = null;
     try{
      
             //日期值处理器  
             JsonConfig jsonConfig = new JsonConfig();  
             jsonConfig.registerJsonValueProcessor(java.util.Date.class, new JsonDateValueProcessor());  
             if(object != null){  
                 if(object instanceof Collection || object instanceof Object[]){  
                     jsonString = JSONArray.fromObject(object,jsonConfig).toString();  
                 }else if(object instanceof String||object instanceof Integer
                   ||object instanceof Boolean||object instanceof Double||object instanceof Float){
                  jsonString="{"+object.toString()+"}";
                 }else{
                     jsonString = JSONObject.fromObject(object,jsonConfig).toString();  
                 }  
             }  
             
     }catch(Exception e){
      e.printStackTrace();
     }
     return jsonString == null ? "{}" : jsonString; 
    }  
      
    private static void setDataFormat2JAVA(){  
        //设定日期转换格式  
        JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[] {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss"}));  
    }  
      
    public static void main(String[] arg) throws Exception{
     
     
     List list =new ArrayList();
     for (int i = 0; i < 10; i++) {
//   Map map=new HashMap();
//   map.put("za", "a");
//   list.add(map);
      Map map =new HashMap();
         map.put("a", "a");
         map.put("b", new Date());
         list.add(map);
  }
      JsonConfig jsonConfig = new JsonConfig();  
         jsonConfig.registerJsonValueProcessor(java.util.Date.class, new JsonDateValueProcessor());  
         Map map1=getMapFromJson("{\"b\":\"2011-05-30 22:18:35\",\"a\":\"a\"}");
         System.out.println(JSONObject.fromObject(new Date(), jsonConfig).toString());
     
//        Map m=new HashMap();
//        m.put("b", B.class);
//        m.put("map", Map.class);
        //System.out.println(" object : " + JSONArray.fromObject(list).toString());
//     A a=new A();
//        System.out.println(" object : " + JsonUtil.getJSONString(list));
//       List list11=getDTOList(JsonUtil.getJSONString(list),Map.class);
//       System.out.println(" object : " + list11.get(0));
//        List list1=JsonUtil.getDTOList(JsonUtil.getJSONString(list),A.class,m);
//        for (Iterator iterator = list1.iterator(); iterator.hasNext();) {
//   A a = (A) iterator.next();
//   System.out.print(a.getName()+",");
//   List list2 = a.getB();
//   for (Iterator iterator2 = list2.iterator(); iterator2.hasNext();) {
//    B b = (B) iterator2.next();
//    System.out.print(b.getAbc()+",");
//    System.out.print(b.getMap().get("bs")+",");
//   }
//   Map ma=a.getMap();
//   System.out.println(ma.get("as").toString());
//   
//  }
//        System.out.println("aa");
//     A a = (A) Class.forName("com.ibm.crl.idop.util.A").newInstance();
    }