Json-lib簡單使用

來源:互聯網
上載者:User

標籤: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 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.