今天继续研究基于S2SH的网上商城项目,其中涉及了json-lib中日期处理类的一些用法,现在讲解如下:
要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包:
1.commons-lang.jar
2.commons-beanutils.jar
3.commons-collections.jar
4.commons-logging.jar
5.ezmorph.jar
6.json-lib-2.2.2-jdk15.jar
我写了以下测试类:
package netSfJson;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
/*
JsonValueProcessor接口:
每个属性的自定义序列化的基本接口。
http://json-lib.sourceforge.net/apidocs/jdk15/net/sf/json/processors/JsonValueProcessor.html
*/
public class DateJsonTest implements JsonValueProcessor {
public static final String Default_DATE_PATTERN = "yyyy-MM-dd";
private DateFormat dateFormat;
public DateJsonTest(String datePattern) {
try {
dateFormat = new SimpleDateFormat(datePattern);
} catch (Exception e) {
dateFormat = new SimpleDateFormat(Default_DATE_PATTERN);
}
}
//processArrayValue:处理值并返回一个合适的JSON值。
@Override
public Object processArrayValue(Object value, JsonConfig jsonConfig) {
// TODO Auto-generated method stub
return process(value);
}
//processObjectValue:处理值并返回一个合适的JSON值。
@Override
public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {
// TODO Auto-generated method stub
return process(value);
}
private Object process(Object value) {
// TODO Auto-generated method stub
return dateFormat.format((Date) value);
/*
format
将日期格式化为日期/时间字符串。
*/
}
}
package netSfJson;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
public class testDateJson {
/**
* @param args
* @author Handsome_fan
*/
public static void main(String[] args) {
/*
public interface Map<K,V>
Map是一个接口
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
*/
/*
HashMap
基于哈希表的 Map接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。
*/
//构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap。
Map<String, Object> map = new HashMap<String, Object>();
map.put("time", new Date());
map.put("name", "fyh");
map.put("age", 22);
//JsonConfig提供了在对一个Json串和Java对象进行互转时,有选择性的过滤掉一些属性值的方法
JsonConfig config = new JsonConfig();
/*
注册一个JsonValueProcessor[Java--->JSON]
public void registerJsonValueProcessor(java.lang.Class propertyType,
JsonValueProcessor jsonValueProcessor)
propertyType-要用作键的属性类型
jsonValueProcessor-进行注册是处理器
*/
config.registerJsonValueProcessor(Date.class, new DateJsonTest("G yyyy-MM-dd hh:mm:ss.SS zzz ZZZ w DDD FF EE"));
/*
G 纪年术语
yyyy-MM-dd hh:mm:ss.SS 很简单不用解释
zzz 一般时区
ZZZ RFC 822时区
w 年中的周数
DDD 年中的天数
FF 月份中的星期
EE 星期中的天数
*/
JSONObject Obj = JSONObject.fromObject(map, config);
/*
JSONObject是名称/值对的无序集合。
它的外部形式是一个用大括号括起来的字符串,在名称和值之间有冒号,值和名称之间有逗号。
内部形式是具有用于通过名称访问值的get和opt方法的对象,以及用于通过名称添加或替换值的方法。
值可以是以下任何类型:Boolean,JSONArray,JSONObject,Number,String或JSONNull对象。
JSONObject构造函数可以用于将外部表单JSON文本转换为内部表单,其值可以使用get和opt方法检索,或者使用元素和toString方法将值转换为JSON文本。
get方法能够获取存在的值,如果获取一个不存在的值将会抛出异常
opt方法返回默认值,而不是抛出异常,因此对于获取可选值很有用。
API文档:http://json-lib.sourceforge.net/apidocs/jdk15/net/sf/json/JSONObject.html
*/
/*
fromObject(Object object, JsonConfig jsonConfig)
创建一个JSONObject
检查对象类型以调用正确的JSONObject工厂方法。 接受JSON格式的字符串,Maps,DynaBeans和JavaBeans。
*/
System.out.println(Obj);
}
}
运行结果如下: