FastJson对Date的处理

jopen 10年前

对日期的序列化:

一种方法是通过注解

Java代码

@JSONField (format="yyyy-MM-dd HH:mm:ss")    public Date birthday;

另一种是通过SerializeConfig:

Java代码  

private static SerializeConfig mapping = new SerializeConfig();    private static String dateFormat;    static {        dateFormat = "yyyy-MM-dd HH:mm:ss";        mapping.put(Date.class, new SimpleDateFormatSerializer(dateFormat));    }

json字符串中使用单引号:

String text = JSON.toJSONString(object, SerializerFeature.UseSingleQuotes);

字段显示不同的key:

public class User {        @JSONField(name="ID")        public int getId() { ... }    }         User user = ...;    JSON.toJSONString(user); // {"ID":001}

自定义序列化代码示例:

public class JsonUtil {        private static SerializeConfig mapping = new SerializeConfig();        private static String dateFormat;        static {            dateFormat = "yyyy-MM-dd HH:mm:ss";        }            /**        * 默认的处理时间        *         * @param jsonText        * @return        */        public static String toJSON(Object jsonText) {            return JSON.toJSONString(jsonText,                    SerializerFeature.WriteDateUseDateFormat);        }            /**        * 自定义时间格式        *         * @param jsonText        * @return        */        public static String toJSON(String dateFormat, String jsonText) {            mapping.put(Date.class, new SimpleDateFormatSerializer(dateFormat));            return JSON.toJSONString(jsonText, mapping);        }    }

自定义反序列化示例:

先自定义一个日期解析类:

Java代码

public class MyDateFormatDeserializer extends DateFormatDeserializer {                private String myFormat;                public MyDateFormatDeserializer(String myFormat) {                super();                this.myFormat = myFormat;            }                @Override            protected <Date> Date cast(DefaultJSONParser parser, Type clazz, Object fieldName, Object val) {                if (myFormat == null) {                    return null;                }                if (val instanceof String) {                    String strVal = (String) val;                    if (strVal.length() == 0) {                        return null;                    }                        try {                        return (Date) new SimpleDateFormat(myFormat).parse((String)val);                    } catch (ParseException e) {                        throw new JSONException("parse error");                    }                }                throw new JSONException("parse error");            }        }