名稱 | 含義 | 備註 |
---|---|---|
QuoteFieldNames | 輸出key時是否使用雙引號,默認爲true | |
UseSingleQuotes | 使用單引號而不是雙引號,默認爲false | |
WriteMapNullValue | 是否輸出值爲null的字段,默認爲false | |
WriteEnumUsingToString | Enum輸出name()或者original,默認爲false | |
UseISO8601DateFormat | Date使用ISO8601格式輸出,默認爲false | |
WriteNullListAsEmpty | List字段若是爲null,輸出爲[],而非null | |
WriteNullStringAsEmpty | 字符類型字段若是爲null,輸出爲」「,而非null | |
WriteNullNumberAsZero | 數值字段若是爲null,輸出爲0,而非null | |
WriteNullBooleanAsFalse | Boolean字段若是爲null,輸出爲false,而非null | |
SkipTransientField | 若是是true,類中的Get方法對應的Field是transient,序列化時將會被忽略。默認爲true | |
SortField | 按字段名稱排序後輸出。默認爲false | |
WriteTabAsSpecial | 把\t作轉義輸出,默認爲false | 不推薦 |
PrettyFormat | 結果是否格式化,默認爲false | |
WriteClassName | 序列化時寫入類型信息,默認爲false。反序列化是需用到 | |
DisableCircularReferenceDetect | 消除對同一對象循環引用的問題,默認爲false | |
WriteSlashAsSpecial | 對斜槓’/’進行轉義 | |
BrowserCompatible | 將中文都會序列化爲\uXXXX格式,字節數會多一些,可是能兼容IE 6,默認爲false | |
WriteDateUseDateFormat | 全局修改日期格式,默認爲false。JSON.DEFFAULT_DATE_FORMAT = 「yyyy-MM-dd」;JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat); | |
DisableCheckSpecialChar | 一個對象的字符串屬性中若是有特殊字符如雙引號,將會在轉成json時帶有反斜槓轉移符。若是不須要轉義,可使用這個屬性。默認爲false | |
NotWriteRootClassName | 含義 | |
BeanToArray | 將對象轉爲array輸出 | |
WriteNonStringKeyAsString | 含義 | |
NotWriteDefaultValue | 含義 | |
BrowserSecure | 含義 | |
IgnoreNonFieldGetter | 含義 | |
WriteEnumUsingName | 含義 |
public class User { private int id; private String name; private String add; private String old; }
public class Word { private String d; private String e; private String f; private String a; private int b; private boolean c; private Date date; private Map<String , Object> map; private List<User> list; }
public class SerializerFeatureTest { private static Word word; private static void init() { word = new Word(); word.setA("a"); word.setB(2); word.setC(true); word.setD("d"); word.setE(""); word.setF(null); word.setDate(new Date()); List<User> list = new ArrayList<User>(); User user1 = new User(); user1.setId(1); user1.setOld("11"); user1.setName("用戶1"); user1.setAdd("北京"); User user2 = new User(); user2.setId(2); user2.setOld("22"); user2.setName("用戶2"); user2.setAdd("上海"); User user3 = new User(); user3.setId(3); user3.setOld("33"); user3.setName("用戶3"); user3.setAdd("廣州"); list.add(user3); list.add(user2); list.add(null); list.add(user1); word.setList(list); Map<String , Object> map = new HashedMap(); map.put("mapa", "mapa"); map.put("mapo", "mapo"); map.put("mapz", "mapz"); map.put("user1", user1); map.put("user3", user3); map.put("user4", null); map.put("list", list); word.setMap(map); } public static void main(String[] args) { init(); // useSingleQuotes(); // writeMapNullValue(); // useISO8601DateFormat(); // writeNullListAsEmpty(); // writeNullStringAsEmpty(); // sortField(); // prettyFormat(); // writeDateUseDateFormat(); // beanToArray(); showJsonBySelf(); } /** * 9:自定義 * 格式化輸出 * 顯示值爲null的字段 * 將爲null的字段值顯示爲"" * DisableCircularReferenceDetect:消除循環引用 */ private static void showJsonBySelf() { System.out.println(JSON.toJSONString(word)); System.out.println(JSON.toJSONString(word, SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty, SerializerFeature.DisableCircularReferenceDetect, SerializerFeature.WriteNullListAsEmpty)); } /** * 8: * 將對象轉爲array輸出 */ private static void beanToArray() { word.setMap(null); word.setList(null); System.out.println(JSON.toJSONString(word)); System.out.println(JSON.toJSONString(word, SerializerFeature.BeanToArray)); } /** * 7: * WriteDateUseDateFormat:全局修改日期格式,默認爲false。 */ private static void writeDateUseDateFormat() { word.setMap(null); word.setList(null); System.out.println(JSON.toJSONString(word)); JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd"; System.out.println(JSON.toJSONString(word, SerializerFeature.WriteDateUseDateFormat)); } /** * 6: * PrettyFormat */ private static void prettyFormat() { word.setMap(null); word.setList(null); System.out.println(JSON.toJSONString(word)); System.out.println(JSON.toJSONString(word, SerializerFeature.PrettyFormat)); } /** * SortField:按字段名稱排序後輸出。默認爲false * 這裏使用的是fastjson:爲了更好使用sort field martch優化算法提高parser的性能,fastjson序列化的時候, * 缺省把SerializerFeature.SortField特性打開了。 * 反序列化的時候也缺省把SortFeidFastMatch的選項打開了。 * 這樣,若是你用fastjson序列化的文本,輸出的結果是按照fieldName排序輸出的,parser時也能利用這個順序進行優化讀取。 * 這種狀況下,parser可以得到很是好的性能。 */ private static void sortField() { System.out.println(JSON.toJSONString(word)); System.out.println(JSON.toJSONString(word, SerializerFeature.SortField)); } /** * 5: * WriteNullStringAsEmpty:字符類型字段若是爲null,輸出爲"",而非null * 須要配合WriteMapNullValue使用,現將null輸出 */ private static void writeNullStringAsEmpty() { word.setE(null); System.out.println(JSONObject.toJSONString(word)); System.out.println("設置WriteMapNullValue後:"); System.out.println(JSONObject.toJSONString(word, SerializerFeature.WriteMapNullValue)); System.out.println("設置WriteMapNullValue、WriteNullStringAsEmpty後:"); System.out.println(JSONObject.toJSONString(word, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty)); } /** * 4: * WriteNullListAsEmpty:List字段若是爲null,輸出爲[],而非null * 須要配合WriteMapNullValue使用,現將null輸出 */ private static void writeNullListAsEmpty() { word.setList(null); System.out.println(JSONObject.toJSONString(word)); System.out.println("設置WriteNullListAsEmpty後:"); System.out.println(JSONObject.toJSONString(word, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullListAsEmpty)); } /** * 3: * UseISO8601DateFormat:Date使用ISO8601格式輸出,默認爲false */ private static void useISO8601DateFormat() { System.out.println(JSONObject.toJSONString(word)); System.out.println("設置UseISO8601DateFormat後:"); System.out.println(JSONObject.toJSONString(word, SerializerFeature.UseISO8601DateFormat)); } /** * 2: * WriteMapNullValue:是否輸出值爲null的字段,默認爲false */ private static void writeMapNullValue() { System.out.println(JSONObject.toJSONString(word)); System.out.println("設置WriteMapNullValue後:"); System.out.println(JSONObject.toJSONString(word, SerializerFeature.WriteMapNullValue)); } /** * 1: * UseSingleQuotes:使用單引號而不是雙引號,默認爲false */ private static void useSingleQuotes() { System.out.println(JSONObject.toJSONString(word)); System.out.println("設置useSingleQuotes後:"); System.out.println(JSONObject.toJSONString(word, SerializerFeature.UseSingleQuotes)); } }
一、useSingleQuotes:
git
二、writeMapNullValue:
github
三、useISO8601DateFormat:
web
四、writeNullListAsEmpty:
算法
五、writeNullStringAsEmpty:
json
六、prettyFormat:
maven
七、writeDateUseDateFormat:
性能
八、beanToArray:
學習
九、自定義組合:showJsonBySelf:
此時完整的輸出以下:測試
{"a":"a","b":2,"c":true,"d":"d","date":1473839656840,"e":"","list":[{"add":"廣州","id":3,"name":"用戶3","old":"33"},{"add":"上海","id":2,"name":"用戶2","old":"22"},null,{"add":"北京","id":1,"name":"用戶1","old":"11"}],"map":{"list":[{"$ref":"$.list[0]"},{"$ref":"$.list[1]"},null,{"$ref":"$.list[3]"}],"user3":{"$ref":"$.list[0]"},"mapz":"mapz","mapo":"mapo","mapa":"mapa","user1":{"$ref":"$.list[3]"}}} { "a":"a", "b":2, "c":true, "d":"d", "date":1473839656840, "e":"", "f":"", "list":[ { "add":"廣州", "id":3, "name":"用戶3", "old":"33" }, { "add":"上海", "id":2, "name":"用戶2", "old":"22" }, null, { "add":"北京", "id":1, "name":"用戶1", "old":"11" } ], "map":{ "list":[ { "add":"廣州", "id":3, "name":"用戶3", "old":"33" }, { "add":"上海", "id":2, "name":"用戶2", "old":"22" }, null, { "add":"北京", "id":1, "name":"用戶1", "old":"11" } ], "user4":null, "user3":{ "add":"廣州", "id":3, "name":"用戶3", "old":"33" }, "mapz":"mapz", "mapo":"mapo", "mapa":"mapa", "user1":{ "add":"北京", "id":1, "name":"用戶1", "old":"11" } } }
注意:
- fastjson把對象轉化成json避免$ref優化
學習地址:
- http://blog.csdn.net/glarystar/article/details/6654494
- http://blog.csdn.net/u013163567/article/details/50736096
項目github地址:
- https://github.com/gubaijin/buildmavenweb