json与java数据转换

19 篇文章 0 订阅
  1. Json必需的包

      commons-httpclient-3.1.jar
      commons-lang-2.4.jar
      commons-logging-1.1.1.jar
      json-lib-2.2.3-jdk13.jar
      ezmorph-1.0.6.jar
      commons-collections-3.2.1.jar

      以上包可以从

        http://commons.apache.org/index.html
      http://json-lib.sourceforge.net/
      http://ezmorph.sourceforge.net/
      http://morph.sourceforge.net/
      http://www.docjar.com/

      中下载到。

      出现java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher错误是因没有导入ezmorph.jar文件或版本不对。

      出现java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap错误是因没有导入commons-collections.jar文件或版本不对。

  2. public class JsonUtil {   

  3.   
  4.     /**页面传至后台时,json数据在request的参数名称*/  
  5.     public final static String JSON_ATTRIBUTE = "json";   
  6.     public final static String JSON_ATTRIBUTE1 = "json1";   
  7.     public final static String JSON_ATTRIBUTE2 = "json2";   
  8.     public final static String JSON_ATTRIBUTE3 = "json3";   
  9.     public final static String JSON_ATTRIBUTE4 = "json4";   
  10.        
  11.     /**  
  12.      * 从一个JSON 对象字符格式中得到一个java对象,形如:  
  13.      * {"id" : idValue, "name" : nameValue, "aBean" : {"aBeanId" : aBeanIdValue, ...}}  
  14.      * @param object  
  15.      * @param clazz  
  16.      * @return  
  17.      */  
  18.     public static Object getDTO(String jsonString, Class clazz){   
  19.         JSONObject jsonObject = null;   
  20.         try{   
  21.             setDataFormat2JAVA();    
  22.             jsonObject = JSONObject.fromObject(jsonString);   
  23.         }catch(Exception e){   
  24.             e.printStackTrace();   
  25.         }   
  26.         return JSONObject.toBean(jsonObject, clazz);   
  27.     }   
  28.        
  29.     /**  
  30.      * 从一个JSON 对象字符格式中得到一个java对象,其中beansList是一类的集合,形如:  
  31.      * {"id" : idValue, "name" : nameValue, "aBean" : {"aBeanId" : aBeanIdValue, ...},  
  32.      * beansList:[{}, {}, ...]}  
  33.      * @param jsonString  
  34.      * @param clazz  
  35.      * @param map 集合属性的类型 (key : 集合属性名, value : 集合属性类型class) eg: ("beansList" : Bean.class)  
  36.      * @return  
  37.      */  
  38.     public static Object getDTO(String jsonString, Class clazz, Map map){   
  39.         JSONObject jsonObject = null;   
  40.         try{   
  41.             setDataFormat2JAVA();    
  42.             jsonObject = JSONObject.fromObject(jsonString);   
  43.         }catch(Exception e){   
  44.             e.printStackTrace();   
  45.         }   
  46.         return JSONObject.toBean(jsonObject, clazz, map);   
  47.     }   
  48.        
  49.     /**  
  50.      * 从一个JSON数组得到一个java对象数组,形如:  
  51.      * [{"id" : idValue, "name" : nameValue}, {"id" : idValue, "name" : nameValue}, ...]  
  52.      * @param object  
  53.      * @param clazz  
  54.      * @return  
  55.      */  
  56.     public static Object[] getDTOArray(String jsonString, Class clazz){   
  57.         setDataFormat2JAVA();   
  58.         JSONArray array = JSONArray.fromObject(jsonString);   
  59.         Object[] obj = new Object[array.size()];   
  60.         for(int i = 0; i < array.size(); i++){   
  61.             JSONObject jsonObject = array.getJSONObject(i);   
  62.             obj[i] = JSONObject.toBean(jsonObject, clazz);   
  63.         }   
  64.         return obj;   
  65.     }   
  66.        
  67.     /**  
  68.      * 从一个JSON数组得到一个java对象数组,形如:  
  69.      * [{"id" : idValue, "name" : nameValue}, {"id" : idValue, "name" : nameValue}, ...]  
  70.      * @param object  
  71.      * @param clazz  
  72.      * @param map  
  73.      * @return  
  74.      */  
  75.     public static Object[] getDTOArray(String jsonString, Class clazz, Map map){   
  76.         setDataFormat2JAVA();   
  77.         JSONArray array = JSONArray.fromObject(jsonString);   
  78.         Object[] obj = new Object[array.size()];   
  79.         for(int i = 0; i < array.size(); i++){   
  80.             JSONObject jsonObject = array.getJSONObject(i);   
  81.             obj[i] = JSONObject.toBean(jsonObject, clazz, map);   
  82.         }   
  83.         return obj;   
  84.     }   
  85.        
  86.     /**  
  87.      * 从一个JSON数组得到一个java对象集合  
  88.      * @param object  
  89.      * @param clazz  
  90.      * @return  
  91.      */  
  92.     public static List getDTOList(String jsonString, Class clazz){   
  93.         setDataFormat2JAVA();   
  94.         JSONArray array = JSONArray.fromObject(jsonString);   
  95.         List list = new ArrayList();   
  96.         for(Iterator iter = array.iterator(); iter.hasNext();){   
  97.             JSONObject jsonObject = (JSONObject)iter.next();   
  98.             list.add(JSONObject.toBean(jsonObject, clazz));   
  99.         }   
  100.         return list;   
  101.     }   
  102.        
  103.     /**  
  104.      * 从一个JSON数组得到一个java对象集合,其中对象中包含有集合属性  
  105.      * @param object  
  106.      * @param clazz  
  107.      * @param map 集合属性的类型  
  108.      * @return  
  109.      */  
  110.     public static List getDTOList(String jsonString, Class clazz, Map map){   
  111.         setDataFormat2JAVA();   
  112.         JSONArray array = JSONArray.fromObject(jsonString);   
  113.         List list = new ArrayList();   
  114.         for(Iterator iter = array.iterator(); iter.hasNext();){   
  115.             JSONObject jsonObject = (JSONObject)iter.next();   
  116.             list.add(JSONObject.toBean(jsonObject, clazz, map));   
  117.         }   
  118.         return list;   
  119.     }   
  120.        
  121.     /**  
  122.      * 从json HASH表达式中获取一个map,该map支持嵌套功能  
  123.      * 形如:{"id" : "johncon", "name" : "小强"}  
  124.      * 注意commons-collections版本,必须包含org.apache.commons.collections.map.MultiKeyMap  
  125.      * @param object  
  126.      * @return  
  127.      */  
  128.     public static Map getMapFromJson(String jsonString) {   
  129.         setDataFormat2JAVA();   
  130.         JSONObject jsonObject = JSONObject.fromObject(jsonString);   
  131.         Map map = new HashMap();   
  132.         for(Iterator iter = jsonObject.keys(); iter.hasNext();){   
  133.             String key = (String)iter.next();   
  134.             map.put(key, jsonObject.get(key));   
  135.         }   
  136.         return map;   
  137.     }   
  138.        
  139.     /**  
  140.      * 从json数组中得到相应java数组  
  141.      * json形如:["123", "456"]  
  142.      * @param jsonString  
  143.      * @return  
  144.      */  
  145.     public static Object[] getObjectArrayFromJson(String jsonString) {   
  146.         JSONArray jsonArray = JSONArray.fromObject(jsonString);   
  147.         return jsonArray.toArray();   
  148.     }   
  149.   
  150.   
  151.     /**  
  152.      * 把数据对象换成json字符串  
  153.      * DTO对象形如:{"id" : idValue, "name" : nameValue, ...}  
  154.      * 数组对象形如:[{}, {}, {}, ...]  
  155.      * map对象形如:{key1 : {"id" : idValue, "name" : nameValue, ...}, key2 : {}, ...}  
  156.      * @param object  
  157.      * @return  
  158.      */  
  159.     public static String getJSONString(Object object) throws Exception{   
  160.         String jsonString = null;   
  161.         //日期值处理器   
  162.         JsonConfig jsonConfig = new JsonConfig();   
  163.         jsonConfig.registerJsonValueProcessor(java.util.Date.class, new JsonDateValueProcessor());   
  164.         if(object != null){   
  165.             if(object instanceof Collection || object instanceof Object[]){   
  166.                 jsonString = JSONArray.fromObject(object, jsonConfig).toString();   
  167.             }else{   
  168.                 jsonString = JSONObject.fromObject(object, jsonConfig).toString();   
  169.             }   
  170.         }   
  171.         return jsonString == null ? "{}" : jsonString;   
  172.     }   
  173.        
  174.     private static void setDataFormat2JAVA(){   
  175.         //设定日期换格式   
  176.         JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[] {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss"}));   
  177.     }   
  178.        
  179.     public static void main(String[] arg) throws Exception{   
  180.         String s = "{status : 'success'}";   
  181.         System.out.println(" object : " + JsonUtil.getJSONString(s));   
  182.     }   
  183. }  

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

 

 

对于java对象换成json数据格式时,要对日期格式化常用格式,类:JsonDateValueProcessor

 

Java代码 json与java数据转换 - 蛛蛛 - IT界的朋友们认识一下吧

  1. import java.text.SimpleDateFormat;   
  2. import java.util.Date;   
  3.   
  4. import net.sf.json.JsonConfig;   
  5. import net.sf.json.processors.JsonValueProcessor;   
  6.   
  7. /*  
  8.  * @author johncon  
  9.  * 创建日期 2008-9-10  
  10.  * json日期值处理器  
  11.  */  
  12. public class JsonDateValueProcessor implements JsonValueProcessor {   
  13.   
  14.     private String format = "yyyy-MM-dd HH:mm:ss";   
  15.   
  16.     public JsonDateValueProcessor() {   
  17.   
  18.     }   
  19.   
  20.     public JsonDateValueProcessor(String format) {   
  21.         this.format = format;   
  22.     }   
  23.   
  24.     public Object processArrayValue(Object value, JsonConfig jsonConfig) {   
  25.         return process(value, jsonConfig);   
  26.     }   
  27.   
  28.     public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {   
  29.         return process(value, jsonConfig);   
  30.     }   
  31.        
  32.     private Object process( Object value, JsonConfig jsonConfig ) {   
  33.         if (value instanceof Date) {   
  34.             String str = new SimpleDateFormat(format).format((Date) value);   
  35.             return str;   
  36.         }   
  37.         return value == null ? null : value.toString();   
  38.     }   
  39.   
  40.     public String getFormat() {   
  41.         return format;   
  42.     }   
  43.   
  44.     public void setFormat(String format) {   
  45.         this.format = format;   
  46.     }   
  47.   
  48. }  

import java.text.SimpleDateFormat;import java.util.Date;import net.sf.json.JsonConfig;import net.sf.json.processors.JsonValueProcessor;/* * @author johncon * 创建日期 2008-9-10 * json日期值处理器 */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; }}

 

 

 

对于对象中有明确类型的对象属性,可不管;但对象中有集合属性的,由于类型不明确,所以要先明确类型:

Java代码 json与java数据转换 - 蛛蛛 - IT界的朋友们认识一下吧

  1. String jsonString = request.getParameter("json");   
  2. //增加对象中的集合属性的类型以及对象元素中的对象属性的集合属性的类型   
  3. Map clazzMap = new HashMap();   
  4. //secondItems是FirstDTO里的集合属性   
  5. clazzMap.put("secondItems", SecondDTO.class);   
  6. //thirdItems是SecondDTO里的集合属性   
  7. clazzMap.put("thirdItems", ThirdDTO.class);   
  8. FirstDTO firstDTO = (FirstDTO)JsonUtil.getDTO(jsonString, FirstDTO.class, clazzMap);  

转载:http://blog.163.com/princess_mjy/blog/static/91731043201041144314625/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值