JSON中对Date的处理,以及一些Date类的简单用法!

时间:2023-01-30 08:41:14

有时候需要给前台返回一些json数据,或者一个json数组,通过json为我们提供的fromObject方法可以轻而易举的完整json数据的封装,但是但碰到一些联级属性(不知这样说妥不妥)时,例如记录时间的Date等,直接使用fromObject方法是会报错的,或者出现结果不是我们需要的格式的数据!

首先引入json的包,自己百度一下就好(我用的是json-lib),今天跟前辈请教时了解到了阿里云的一个fastjson这个包,还没有去研究,据说很强大,等我研究一下也会写一篇博客!(因为我都是一次导入很多个常用的包的,所以也不截图了,不过现在也渐渐开始用maven写项目了)

 

首先需要实现json为我们提供的JsonValueProcessor接口,指定Date类型的处理方式!代码来自百度

package com.loger.test;

import java.text.SimpleDateFormat;
import java.util.Date;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;

public class JsonDateValueProcessor implements JsonValueProcessor {

    // 定义转换日期类型的输出格式  
    private String format = "yyyy-MM-dd";  
  
    public JsonDateValueProcessor() {  
  
    }  
  
    public JsonDateValueProcessor(String format) {  
         this.format = format;  
    }  
  
    @Override  
    public Object processArrayValue(Object arg0, JsonConfig arg1) {  
        return process(arg0);  
    }  
  
    private Object process(Object arg0) {  
        SimpleDateFormat sdf = new SimpleDateFormat(format);  
        return sdf.format(arg0);  
    }  
  
    @Override  
    public Object processObjectValue(String key, Object value,  
            JsonConfig jsonConfig) {  
        if (value instanceof java.util.Date) {  
            String str = new SimpleDateFormat(format).format((Date) value);  
            return str;  
        }  
        if (null != value) {  
            return value.toString();  
        }  
        return "";  
    }  
}

测试JSONArray:(后期说明:这里我不小心弄错了,要用大写的MM,小写表示分)

package com.loger.test;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.loger.entity.UserDate;

import net.sf.json.JSONArray;
import net.sf.json.JsonConfig;

public class JSONArrayTestForDate {
    public static List<UserDate> list = new ArrayList<>();
    static {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
        Date birthday;
        try {
            birthday = sdf.parse("1995-09-01");
            System.out.println(birthday);
            list.add(new UserDate("chenle",birthday));
            list.add(new UserDate("chenle",birthday));
            list.add(new UserDate("chenle",birthday));
            list.add(new UserDate("chenle",birthday));
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
    
    public static void main(String[] args) {
        
        JsonConfig jsonConfig = new JsonConfig();
        jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());
        JSONArray jsonArray = JSONArray.fromObject(list,jsonConfig);
        System.out.println(jsonArray);
    }
}

运行结果:

JSON中对Date的处理,以及一些Date类的简单用法!

可以看到,日期已经按照指定的类型输出

 

测试JSONObject:

package com.loger.test;

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

import com.loger.entity.UserDate;

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

public class JSONObjectTestForDate {
    
    public static void main(String[] args) throws ParseException {
        
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
        UserDate user = new UserDate("chenle",sdf.parse("1995-09-01"));
        JsonConfig jsonConfig = new JsonConfig();
        jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());
        JSONObject jsonObject = new JSONObject();
        jsonObject = JSONObject.fromObject(user,jsonConfig);
        System.out.println(jsonObject);
    }
    
}

运行结果:

JSON中对Date的处理,以及一些Date类的简单用法!

 

下面在测试不处理格式的结果:

JSON中对Date的处理,以及一些Date类的简单用法!

不处理的结果也是这样的

 

另外说一下:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
User user = new User("chenle",sdf.parse("1995-09-01"));

日期的输入要用到以上格式,new Date("1995-09-01")这种方式显示已过期,而且会报错!