依賴
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.7</version> </dependency>
SerializerFeature屬性
| 名稱 | 含義 | 備注 |
|---|---|---|
| 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 | 含義 |
示例
准備
- User、Word來模擬各種數據類型。
- SerializerFeatureTest:JSON部分示例的示例方法。
User類型:缺省get、set方法
public class User { private int id; private String name; private String add; private String old; }
Word類型:缺省get、set方法
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; }
SerializerFeatureTest:測試類
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)); } }
對應輸出結果如下:
- 1、useSingleQuotes:

- 2、writeMapNullValue:

- 3、useISO8601DateFormat:

- 4、writeNullListAsEmpty:

- 5、writeNullStringAsEmpty:

- 6、prettyFormat:

- 7、writeDateUseDateFormat:

- 8、beanToArray:

- 9、自定義組合: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
-轉自:http://blog.csdn.net/u010246789/article/details/52539576
