使用原始的json-lib处理java中的Date,返回的json字符串是这样的:
A::: "birthday":{"date":27,"day":0,"hours":10,"minutes":22,"month":8,"seconds":11,"time":1254018131312,"timezoneOffset":-480,"year":109}
而在系统页面上显示的日期格式一般是:yyyy-MM-dd 之类的格式。在前台用js处理以上字符串是比较麻烦的。我们的目标是通过修改json-lib的源码以配置的方式可以自定义Date的json格式!
比如:
B::: "birthday":"2009-09-27 10:29:55" ,,"birthday":"2009-09-27"
本文并不是讨论json-lib的实现原理,有兴趣的读者可以自己研究一下。
1.下载json-lib的源码包,新建java工程,将源码放到src目录下。会出现很多红XX,需要其他jar包,看需要什么就加什么上去吧。
2.新建测试类
public class Person {
private String username;
private String password;
private Date birthday;
// getter setter
3.测试用例
import java.util.Date;
import net.sf.json.JSONObject;
/**
* 测试用例
* @author HalZhang
*
*/
public class JsonTest {
public static void main(String[] args) {
Person person = new Person();
person.setUsername("halzhang");
person.setBirthday(new Date());
JSONObject object = JSONObject.fromObject(person);
System.out.println(object.toString());
}
}
使用默认的json-lib,birthday输出的json格式是A
通过debug跟踪发现json-lib将对象转换为json字符串主要是在JSONObject这个类完成的,所以我们主要是对这个类做一些修改
1. 添加:
private static String DATEFORMAT = "yyyy-MM-dd";//定义Date默认的JSON格式
private final static String DATEFORMAT_KEY = "dateformat";
/**
* 是否格式化Date<br>
* 方便自定义需求
*/
private static boolean IFFORMATDATE = false;
private final static String IFFORMATDATE_KEY = "ifFormatDate";
//静态方法加载配置文件
static {
Properties properties = new Properties();
try {
InputStream is = JSONObject.class.getClassLoader().getResourceAsStream("dateformat.properties");
properties.load(is);
DATEFORMAT = properties.getProperty(DATEFORMAT_KEY);
if(properties.containsKey(IFFORMATDATE_KEY)){
IFFORMATDATE = Boolean.parseBoolean(properties.getProperty(IFFORMATDATE_KEY));
}
} catch (FileNotFoundException e) {
System.out.println("系统找不到dateformat.properties配置文件,Date类型对象转换成JSON使用默认的格式:"+DATEFORMAT);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Creates a JSONObject.<br>
* 并设置日期显示格式
* @param object
* @param dateFormat
* @return
*/
public static JSONObject fromObject(Object object,String dateFormat){
JSONObject.DATEFORMAT = dateFormat;
return fromObject(object, new JsonConfig());
}
/**
* 构造器,方便动态定义日期显示格式
* @param dateformat 日期显示格式
*/
public JSONObject(String dateformat){
this();
JSONObject.DATEFORMAT = dateformat;
}
2.修改setValue方法
private static void setValue( JSONObject jsonObject, String key, Object value, Class type,
JsonConfig jsonConfig, boolean bypass ) {
boolean accumulated = false;
if( value == null ){
value = jsonConfig.findDefaultValueProcessor( type )
.getDefaultValue( type );
if( !JsonVerifier.isValidJsonValue( value ) ){
throw new JSONException( "Value is not a valid JSON value. " + value );
}
}
if( jsonObject.properties.containsKey( key ) ){
if( String.class.isAssignableFrom( type ) ){
Object o = jsonObject.opt( key );
if( o instanceof JSONArray ){
((JSONArray) o).addString( (String) value );
}else{
jsonObject.properties.put( key, new JSONArray().element( o )
.addString( (String) value ) );
}
}else{
jsonObject.accumulate( key, value, jsonConfig );
}
accumulated = true;
}else{
if (bypass || String.class.isAssignableFrom(type)) {
jsonObject.properties.put(key, value);
} else if (Date.class.isAssignableFrom(type) && IFFORMATDATE) {
//当属性类型为Date,并且需要进行格式化的时候,将Date转化为我们定义的日期格式
SimpleDateFormat format = new SimpleDateFormat(DATEFORMAT);
jsonObject.properties.put(key, format.format(value));
} else {
jsonObject.setInternal(key, value, jsonConfig);
}
}
value = jsonObject.opt( key );
if( accumulated ){
JSONArray array = (JSONArray) value;
value = array.get( array.size() - 1 );
}
firePropertySetEvent( key, value, accumulated, jsonConfig );
}
3.配置文件 dateformat.properties 放在src目录下面
#Created by JInto - www.guh-software.de
#Mon Aug 31 15:25:06 GMT 2009
#"yyyy.MM.dd G 'at' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT
#"EEE, MMM d, ''yy" Wed, Jul 4, '01
#"h:mm a" 12:08 PM
#"hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
#"K:mm a, z" 0:08 PM, PDT
#"yyyyy.MMMMM.dd GGG hh:mm aaa" 02001.July.04 AD 12:08 PM
#"EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700
#"yyMMddHHmmssZ" 010704120856-0700
#"yyyy-MM-dd'T'HH:mm:ss.SSSZ" 2001-07-04T12:08:56.235-0700
dateformat=yyyy-MM-dd
# true = you want to use the dateformat to format the java.Util.Date
ifFormatDate=true
通过以上修改配置,Date的json字符串格式就可以通过我们自定义了。
分享到:
相关推荐
json-lib-2.4-jdk15.jar下载,json-lib是一款简单易用的Java JSON库。它可以将Java对象转换成JSON字符串,也可以将JSON字符串转换成Java对象。json-lib体积小、无依赖,性能表现也不错,适合在各种Java项目中使用。 ...
1、json的核心包:json-lib-2.4-jdk15.jar; 2、json-lib-2.4-jdk15.jar依赖的jar包:commons-beanutils-1.9.3.jar,commons-collections-3.2.2.jar,commons-lang-2.6.jar,commons-logging-1.2.jar,ezmorph-1.0.6...
JSON-lib包json-lib-0.8.jar和json-lib-0.9.jar包
json-lib 源码
json基础jar包,包含json-lib-2.3-jdk15.jar源码
里面包含json-lib所需的全部jar文件. json-lib-2.1-jdk15.jar ezmorph-1.0.3.jar commons-beanutils.jar commons-collections-3.2.1.jar commons-lang-2.4.jar commons-logging-1.1.1.jar
json架包,包好json-lib-2.2.3-jdk13.jar,json-lib-2.4-jdk14.jar以及附带的支持包ezmorph-1.0.6.jar,commons-logging.jar,commons-lang.jar等
<groupId>net.sf.json-lib</groupId> <artifactId>json-lib <version>2.4 <classifier>jdk15 或者直接下载这个包
json-lib-2.4-jdk15所需全部JAR包,资源清单 json-lib-2.4-jdk15.jar 依赖: ezmorph-1.0.6.jar commons-beanutils-1.8.3.jar commons-lang-2.5.jar morph-1.1.1.jar commons-logging-1.1.1.jar commons-collections-...
json-lib-2.4-jdk15.jar json-lib-2.4-jdk15-sources.jar json-lib-2.4-jdk15-javadoc.jar 包含文件有:json-lib-2.4-jdk15.jar json-lib-2.4-jdk15-sources.jar json-lib-2.4-jdk15-javadoc.jar
json-lib-2.2.3-jdk15-javadoc.jar json 源代码
json-lib-2.4-jdk15-sources.jar 是net.sf.json-lib-jdk15-2.4的源码文件
jquery和struts2结合使用的jar包
json-lib-2.4-jdk15依赖的库文件: 压缩包内容: commons-beanutils-1.8.0.jar commons-collections-3.1.jar commons-lang-2.5.jar commons-logging-1.1.1.jar ezmorph-1.0.6.jar json-lib-2.4-jdk15-javadoc.jar ...
json的核心包:json-lib-2.4-jdk15.jar;json-2.4所依赖的jar包:commons-beanutils-1.8.0.jar,commons-collections-3.2.1.jar,commons-lang-2.5.jar,commons-logging-1.1.1.jar,ezmorph-1.0.6.jar;以及和...
json-lib-2.2.3-jdk13.jar commons-beanutils-1.7.0.jar commons-collections-3.2.1.jar commons-lang-2.4.jar commons-logging-1.1.1.jar ezmorph-1.0.6.jar
使用json-lib实现json与Java对象的互转
json-lib-2.4-jdk15.jar所需全部JAR包需要的伙伴们下载
由于maven 网站仓库不能下载json-lib,去官网还需要一个一个下jar,所以将下载下来的jar打包分享下!