1. 程式人生 > >解決JSONArray.fromObject方法對DATA的處理

解決JSONArray.fromObject方法對DATA的處理

有時候需要給前臺返回一些json資料,或者一個json陣列,通過json為我們提供的fromObject方法可以輕而易舉的完整json資料的封裝,但是但碰到一些聯級屬性(不知這樣說妥不妥)時,例如記錄時間的Date等,直接使用fromObject方法是會報錯的,或者出現結果不是我們需要的格式的資料!

首先引入json的包,自己百度一下就好(我用的是json-lib),今天跟前輩請教時瞭解到了阿里雲的一個fastjson這個包,還沒有去研究,據說很強大,等我研究一下也會寫一篇部落格!(因為我都是一次匯入很多個常用的包的,所以也不截圖了,不過現在也漸漸開始用maven寫專案了)

首先需要實現json為我們提供的JsonValueProcessor介面

,指定Date型別的處理方式!程式碼來自百度

複製程式碼
package com.loger.test;

import java.text.SimpleDateFormat;
import java.util.Date;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;

public class JsonDateValueProcessor implements JsonValueProcessor {

    // 定義轉換日期型別的輸出格式  
    private String format = "yyyy-MM-dd";  
  
    
public JsonDateValueProcessor() { } public JsonDateValueProcessor(String format) { this.format = format; } @Override public Object processArrayValue(Object arg0, JsonConfig arg1) { return process(arg0); } private Object process(Object arg0) { SimpleDateFormat sdf
= new SimpleDateFormat(format); return sdf.format(arg0); } @Override public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) { if (value instanceof java.util.Date) { String str = new SimpleDateFormat(format).format((Date) value); return str; } if (null != value) { return value.toString(); } return ""; } }
複製程式碼

測試JSONArray:(後期說明:這裡我不小心弄錯了,要用大寫的MM,小寫表示分)

複製程式碼
package com.loger.test;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.loger.entity.UserDate;

import net.sf.json.JSONArray;
import net.sf.json.JsonConfig;

public class JSONArrayTestForDate {
    public static List<UserDate> list = new ArrayList<>();
    static {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
        Date birthday;
        try {
            birthday = sdf.parse("1995-09-01");
            System.out.println(birthday);
            list.add(new UserDate("chenle",birthday));
            list.add(new UserDate("chenle",birthday));
            list.add(new UserDate("chenle",birthday));
            list.add(new UserDate("chenle",birthday));
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
    
    public static void main(String[] args) {
        
        JsonConfig jsonConfig = new JsonConfig();
        jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());
        JSONArray jsonArray = JSONArray.fromObject(list,jsonConfig);
        System.out.println(jsonArray);
    }
}
複製程式碼

執行結果:

可以看到,日期已經按照指定的型別輸出

測試JSONObject:

複製程式碼
package com.loger.test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import com.loger.entity.UserDate;

import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;

public class JSONObjectTestForDate {
    
    public static void main(String[] args) throws ParseException {
        
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
        UserDate user = new UserDate("chenle",sdf.parse("1995-09-01"));
        JsonConfig jsonConfig = new JsonConfig();
        jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());
        JSONObject jsonObject = new JSONObject();
        jsonObject = JSONObject.fromObject(user,jsonConfig);
        System.out.println(jsonObject);
    }
    
}
複製程式碼

執行結果:

下面在測試不處理格式的結果:

不處理的結果也是這樣的

另外說一下:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
User user = new User("chenle",sdf.parse("1995-09-01"));

日期的輸入要用到以上格式,new Date("1995-09-01")這種方式顯示已過期,而且會報錯!