JSON和java對象互轉

來源:互聯網
上載者:User

 

//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();
    }  
} 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.