標籤:json lib
Json-lib可以將Java對象轉成json格式的字串,也可以將Java對象轉換成xml格式的文檔,同樣可以將json字串轉換成Java對象或是將xml字串轉換成Java對象。
1、 首先要去官方下載json-lib工具包(http://sourceforge.net/projects/json-lib/files/json-lib/json-lib-2.4/)
Json-lib 依賴下面幾個包:
下面言歸正傳 開始介紹json-lib的使用:
在實際項目中,為了代碼複用性,減少代碼冗餘,常常對某些方法進行封裝,用到的時候直接調用,不必要每次都重寫相同代碼。
Json-lib 可以處理集合或者單個對象轉換成json字串,針對集合或者單個對象json-lib採用了不同的方法來分開處理:
1) 當參數為單個對象:
//將參數對象轉化成JSONObject對象
JSONObject jsonObject = JSONObject.fromObject(pObject);
//通過JSONObject的toString()方法得到json字串
String jsonString = jsonObject.toString();
2) 當參數為集合類型
//將參數對象轉換成JSONArray對象
JSONArray jsonArray = JSONArray.fromObject(pObject);
//通過jsonArray的toString()方法得到json字串
String jsonString = jsonArray.toString();
※json-lib在處理日期格式化的時候要注意,如果你要格式化輸出日期,需要手動實現JsonValueProcessor介面,來對日期進行處理。JsonValueProcessor介面中聲明了兩個方法:processArrayValue(Object value, JsonConfig jsonConfig)和 processObjectValue(String key, Object value,JsonConfig jsonConfig)顧名思義,分別針對數組集合和單個對象進行處理。
下面是我的實現:
/**
實現JsonValueProcessor介面
*/
public class DateJsonValueProcessor implements JsonValueProcessor{
private String format = "yyyy-MM-dd HH:mm:ss" ;
public DateJsonValueProcessor(String format){
this.format = format;
}
/**
*
針對數組進行處理
*/
public Object processArrayValue(Object value, JsonConfig jsonConfig) {
String[] obj = {};
if (value instanceof java.util.Date[]) {
SimpleDateFormat sf = new SimpleDateFormat(format);
java.util.Date[] dates = (java.util.Date[]) value;
obj = new String[dates.length];
for (int i = 0; i < dates.length; i++) {
obj[i] = sf.format(dates[i]);
}
}
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]);
}
}
if (value instanceof java.sql.Date[]) {
SimpleDateFormat sf = new SimpleDateFormat(format);
java.sql.Date[] dates = (java.sql.Date[]) 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) {
//判斷value是否為空白
if(GSUtils.isEmpty(value)){
return "";
}
//判斷value類型
if (value instanceof Timestamp) {
String str = new SimpleDateFormat(format).format((Timestamp) value);
return str;
} else if (value instanceof java.util.Date) {
String str = new SimpleDateFormat(format).format((java.util.Date) value);
return str;
} else if (value instanceof java.sql.Date) {
String str = new SimpleDateFormat(format).format((java.sql.Date) value);
return str;
}
return value.toString();
}
public String getFormat() {
return format;
}
public void setFormat(String format) {
this.format = format;
}
}
實現了JsonValueProcessor介面,還沒有完,因為json-lib不知道啊,所以還要繼續下去,現在我們需要用到JsonConfig類,通過使用這個類,可以將我們自訂的實現註冊到json-lib上,關鍵代碼如下:
JsonConfig cfg = new JsonConfig();
cfg.registerJsonValueProcessor(java.sql.Timestamp.class, new DateJsonValueProcessor(pFormatString));
cfg.registerJsonValueProcessor(java.util.Date.class, new DateJsonValueProcessor(pFormatString));
cfg.registerJsonValueProcessor(java.sql.Date.class, new DateJsonValueProcessor(pFormatString));
到了這一步 我們終於要完成任務了,但是還是繼續看吧,我們需要將jsonconfig對象傳入fromObject中,注意cfg
1) 當參數為單個對象:
//將參數對象轉化成JSONObject對象
JSONObject jsonObject = JSONObject.fromObject(pObject,cfg);
//通過JSONObject的toString()方法得到json字串
String jsonString = jsonObject.toString();
2) 當參數為集合類型
//將參數對象轉換成JSONArray對象
JSONArray jsonArray = JSONArray.fromObject(pObject,cfg);
//通過jsonArray的toString()方法得到json字串
String jsonString = jsonArray.toString();
...
關於json-lib 功能還是非常強大的,這裡只是工作涉及到這部分知識點,更多功能請參考API,這裡簡單介紹一些工作中常用的方法:
toBean(String jsonString, Class targetClass)---將json字串轉化為目標對象,需要注意的是目標類中必須有空的建構函式。
toString()---將java對象轉換成json字串
toArray() -- 從json字串中得到相應java數組
toArray() -- 將list轉換成Array