这个json转换器是将JSON转换成各种类型比如:对象、MAP、List和将对象转化成JSON等等。

json是一种格式由:“{”、“:”、“,”和“}”以及英文字母、数字汉字组成。

先来讲解一下json转换成各种形式  这是我在看别人微博学习到的。有错误的地方希望大家能指出错误的地方。


转换json格式时,有些日期类型的转换比较烦人,他转化后的类型看不明白,所以我就讲日期类型格式化了一下。

具体要用到一些jar包:ezmorph-1.0.6.jar和json-lib-2.2.3-jdk13.jar即可。

/**
  * 
  */
 package common;

 import java.text.SimpleDateFormat;
 import java.util.Date;

 import net.sf.json.JsonConfig;
 import net.sf.json.processors.JsonValueProcessor;

 /**
  * @author 200937
  *
  */
 public class JsonDateValueProcessor implements JsonValueProcessor {

     private String format = "yyyy-MM-dd HH:mm:ss";  
       
      public JsonDateValueProcessor() {  
       
      }  
       
      public JsonDateValueProcessor(String format) {  
       this.format = format;  
      }  
       
      public Object processArrayValue(Object value, JsonConfig jsonConfig) {  
       return process(value, jsonConfig);  
      }  
       
      public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {  
       return process(value, jsonConfig);  
      }  
        
      private Object process( Object value, JsonConfig jsonConfig ) {  
       if (value instanceof Date) {  
        String str = new SimpleDateFormat(format).format((Date) value);  
        return str;  
       }  
       return value == null ? null : value.toString();  
      }  
       
      public String getFormat() {  
       return format;  
      }  
       
      public void setFormat(String format) {  
       this.format = format;  
      }      

 }

现在开始写json转换各种类型的代码。代码如下

/**
  * 
  */
 package common; 
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
     
 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.util.JSONUtils;
     

 /**
  * @author 200937
  *
  */
 public class JsonUtil {
       
     /**页面传至后台时,json数据在request的参数名称*/    
     public final static String JSON_ATTRIBUTE = "json";     
     public final static String JSON_ATTRIBUTE1 = "json1";     
     public final static String JSON_ATTRIBUTE2 = "json2";     
     public final static String JSON_ATTRIBUTE3 = "json3";     
     public final static String JSON_ATTRIBUTE4 = "json4";     
          
     /**   
      * 从一个JSON 对象字符格式中得到一个java对象,形如:   
      * {"id" : idValue, "name" : nameValue, "aBean" : {"aBeanId" : aBeanIdValue, ...}}   
      * @param object   
      * @param clazz   
      * @return   
      */    
     public static Object getDTO(String jsonString, Class clazz){     
         JSONObject jsonObject = null;     
         try{     
             setDataFormat2JAVA();      
             jsonObject = JSONObject.fromObject(jsonString);     
         }catch(Exception e){     
             e.printStackTrace();     
         }     
         return JSONObject.toBean(jsonObject, clazz);     
     }     
          
     /**   
      * 从一个JSON 对象字符格式中得到一个java对象,其中beansList是一类的集合,形如:   
      * {"id" : idValue, "name" : nameValue, "aBean" : {"aBeanId" : aBeanIdValue, ...},   
      * beansList:[{}, {}, ...]}   
      * @param jsonString   
      * @param clazz   
      * @param map 集合属性的类型 (key : 集合属性名, value : 集合属性类型class) eg: ("beansList" : Bean.class)   
      * @return   
      */    
     public static Object getDTO(String jsonString, Class clazz, Map map){     
         JSONObject jsonObject = null;     
         try{     
             setDataFormat2JAVA();      
             jsonObject = JSONObject.fromObject(jsonString);     
         }catch(Exception e){     
             e.printStackTrace();     
         }     
         return JSONObject.toBean(jsonObject, clazz, map);     
     }     
          
     /**   
      * 从一个JSON数组得到一个java对象数组,形如:   
      * [{"id" : idValue, "name" : nameValue}, {"id" : idValue, "name" : nameValue}, ...]   
      * @param object   
      * @param clazz   
      * @return   
      */    
     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 object   
      * @param clazz   
      * @param map   
      * @return   
      */    
     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 object   
      * @param clazz   
      * @return   
      */    
     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 object   
      * @param clazz   
      * @param map 集合属性的类型   
      * @return   
      */    
     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 object   
      * @return   
      */    
     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形如:["123", "456"]   
      * @param jsonString   
      * @return   
      */    
     public static Object[] getObjectArrayFromJson(String jsonString) {     
         JSONArray jsonArray = JSONArray.fromObject(jsonString);     
         return jsonArray.toArray();     
     }     
     
     
     /**   
      * 把数据对象转换成json字符串   
      * DTO对象形如:{"id" : idValue, "name" : nameValue, ...}   
      * 数组对象形如:[{}, {}, {}, ...]   
      * map对象形如:{key1 : {"id" : idValue, "name" : nameValue, ...}, key2 : {}, ...}   
      * @param object   
      * @return   
      */    
     public static String getJSONString(Object object) throws Exception{     
         String jsonString = null;     
         //日期值处理器     
         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{     
                 jsonString = JSONObject.fromObject(object, jsonConfig).toString();     
             }     
         }     
         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{     
         String s = "{status : 'success'}";     
         System.out.println(" object : " + JsonUtil.getJSONString(s));     
     }     
 }

JSON转换器我们可以将他写在我们项目的COMMON公共方法中共项目使用。

我们可以验证一下这些代码的正确性:

我们创建一个实体类:Accessory

/**
  * @author 200937
  *
  */
 public class Accessory {
     private String fid;//id标识
     private String parentId;//(外键)主表id
     private String AccessoryName;//附件名称
     private String AccessoryType;//附件格式
     private String AccessoryUrl;//附件路径
     
     public String getFid() {
         return fid;
     }
     public void setFid(String fid) {
         this.fid = fid;
     }
     public String getParentId() {
         return parentId;
     }
     public void setParentId(String parentId) {
         this.parentId = parentId;
     }
     public String getAccessoryName() {
         return AccessoryName;
     }
     public void setAccessoryName(String accessoryName) {
         AccessoryName = accessoryName;
     }
     public String getAccessoryType() {
         return AccessoryType;
     }
     public void setAccessoryType(String accessoryType) {
         AccessoryType = accessoryType;
     }
     public String getAccessoryUrl() {
         return AccessoryUrl;
     }
     public void setAccessoryUrl(String accessoryUrl) {
         AccessoryUrl = accessoryUrl;
     }
     
 }



然后我们创建一个Test(测试类),验证一下将Accessory对象转换成jsonString类型。代码如下

/**
  * 
  */
 package test;

 import common.JsonUtil;

 import domain.Accessory;

 /**
  * @author 200937
  *
  */
 public class BeanToJsonTest {
     
     public static void main(String [] arg){
         Accessory accessory=new Accessory();
         accessory.setFid("1");
         accessory.setParentId("1");
         accessory.setAccessoryName("json");
         accessory.setAccessoryType("excel");
         accessory.setAccessoryUrl("http//.....");
         String accessoryJsonString="";
         try {
             accessoryJsonString=JsonUtil.getJSONString(accessory);
             System.out.println(accessoryJsonString);
         } catch (Exception e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
         Accessory accessory2=(Accessory)JsonUtil.getDTO(accessoryJsonString, Accessory.class);
         System.out.println("文件名:"+accessory2.getAccessoryName());
     }
 }


谨记:有些对象转化后如在单独对这个对象再封装一次后转换后的jsonString后 在打印出的没有这个封装(希望有大神能够告诉我这是怎么回事)。