Java筆記-JSONObject序列化包含Date類型數據的Java對象

問題場景

在Java里面,會遇到這樣的問題:數據庫中存在TIMESTAMP類型的數據,這樣Bean對象里面就會有Date(java.util.Date)類型參數,我們使用JSONObject將對象序列化的時候,會發現Date屬性被分隔成年、月、日、時、分、秒等子對象了,這肯定不符合我們的期望。


解決方案

使用json-lib包提供的JsonConfig可以在處理Java對象和Json互轉時過濾屬性值,具體的方案如下:

  • 創建日期處理器類

利用SimpleDateFormat將Date類型的數據format一下,該類實現了JsonValueProcessor接口。

public class JsonDateValueProcessor implements JsonValueProcessor {

    private String format = "yyyy-MM-dd HH:mm:ss";

    public JsonDateValueProcessor() {
        super();
    }

    public JsonDateValueProcessor(String format) { // 自己需要的格式
        super();
        this.format = format;
    }

    @Override
    public Object processArrayValue(Object value, JsonConfig paramJsonConfig) {
        return process(value);
    }

    @Override
    public Object processObjectValue(String key, Object value, JsonConfig paramJsonConfig) {
        return process(value);
    }

    private Object process(Object value) {
        if (value instanceof Date) {
            SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.CHINA);
            return sdf.format(value);
        }
        return value == null ? "" : value.toString();
    }
}
  • 使用方式

處理單個bean

JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());
JSONObject json = new JSONObject();  
json.fromObject(object, jsonConfig)  

處理beanList

List<Object> objects = new ArrayList<>();
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());
JSONArray taskArray = JSONArray.fromObject(objects, jsonConfig);

處理map

JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());
JSONObject json = new JSONObject();
json.putAll(Map, jsonConfig);   
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,948評論 18 139
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,766評論 18 399
  • 國家電網公司企業標準(Q/GDW)- 面向對象的用電信息數據交換協議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,167評論 6 13
  • 這簡書的綁定的手機號上月注銷了,關鍵是密碼也忘了,今天去換新號碼裝上了,我就不能在這里寫東西了,我要重新申請新號碼...
    靜心舞瑜的日志閱讀 311評論 0 0
  • 昨晚,夢到火電廠重新開工了,我又在那里上班。那個30年前我作夢都在逃離的地方,居然是如今入夢次數最多的。有時候,我...
    曾穎閱讀 297評論 3 4