JSON 日期格式转换

注意:需要导入json运行的jar包:

person类 :

import java.sql.Timestamp;
public class Person {
private int id;
private String usrname;
private Timestamp borthdate;            //如果这里是Date,则将工具类中的TimeStamp改为Date即可
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsrname() {
return usrname;
}
public void setUsrname(String usrname) {
this.usrname = usrname;
}
public Timestamp getBorthdate() {
return borthdate;
}
public void setBorthdate(Timestamp borthdate) {
this.borthdate = borthdate;
}
}

json日期格式转化工具类:


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

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

/**  
 * JSON日期格式转换 
 *  
*/  
public class DateJsonValueProcessor implements JsonValueProcessor  
{  
    private String format = "yyyy-MM-dd HH:mm:ss";  

    public DateJsonValueProcessor()  
    {   }  

    public DateJsonValueProcessor(String format)  
    {  
        this.format = format;  
    }  
//如果person类中的borthdate属性的类型为Date,则将该方法中的Timestamp改为Date即可
    public Object processArrayValue(Object value, JsonConfig jsonConfig)     
    {  

        String[] obj = {};  
        if (value instanceof Timestamp[])  
        {  
            SimpleDateFormat sf = new SimpleDateFormat(format);  
            Timestamp[] dates = (Timestamp[]) value;  
            obj = new String[dates.length];  
            for (int i = 0; i < dates.length; i++)  
            {  
                obj[i] = sf.format(dates[i]);  
            }  
        }  
        return obj;  
    }  

    public Object processObjectValue(String key, Object value, JsonConfig jsonConfig)  
    {  

        if (value instanceof Date)  
        {  
            String str = new SimpleDateFormat(format).format((Date) value);  
            return str;  
        }  
        return value;  
    }  

    public String getFormat()  
    {  

        return format;  
    }  

    public void setFormat(String format)  
    {  

        this.format = format;  
    }  
}  


测试类:
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;

import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;

public class test {
public static void main(String[] args) {
JsonConfig jsonConfig = new JsonConfig();  
Person p = new Person();
p.setId(1);
p.setUsrname("zhangsan");
p.setBorthdate(new Timestamp(System.currentTimeMillis()));

    jsonConfig.registerJsonValueProcessor(java.sql.Timestamp.class, new DateJsonValueProcessor());  
    JSONObject jsonObj = JSONObject.fromObject(p, jsonConfig);  
 
System.out.println(jsonObj);
}
}

以下是参考资料(以备以后使用):

自己编写了一个工具类,处理页面提交json格式数据到后台,再进行处理成JAVA对象数据

1、DTO:Data Transfer Object,数据传送对象

2、对于日期格式的问题,也已经处理

3、json-lib-2.2.2-jdk13.jar (2.1在日期数组 json->java有问题)

工具类JsonUtil代码如下:

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

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;

 }

}

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

String jsonString = request.getParameter("json");

//增加对象中的集合属性的类型以及对象元素中的对象属性的集合属性的类型

Map clazzMap = new HashMap();

//secondItems是FirstDTO里的集合属性

clazzMap.put("secondItems", SecondDTO.class);

//thirdItems是SecondDTO里的集合属性

clazzMap.put("thirdItems", ThirdDTO.class);

FirstDTO firstDTO = (FirstDTO)JsonUtil.getDTO(jsonString, FirstDTO.class, clazzMap);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值