您的位置:首页 > Web前端 > JavaScript

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

2017-03-24 21:22 274 查看
有时候需要给前台返回一些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);
}
}


运行结果:



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

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

}


运行结果:



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



不处理的结果也是这样的

另外说一下:

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


日期的输入要用到以上格式,new Date("1995-09-01")这种方式显示已过期,而且会报错!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: