fastjson SerializerFeature详解

前端之家收集整理的这篇文章主要介绍了fastjson SerializerFeature详解前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

依赖

      • 1
      • 2
      • 3
      • 4
      • 5
      <dependency>
    • groupId>com.alibaba</groupId>
    • artifactId>fastjsonartifactId>
    • version>1.2.7version>
    • dependency>

    SerializerFeature属性

    名称 含义 备注
    QuoteFieldNames 输出key时是否使用双引号,默认为true
    UseSingleQuotes 使用单引号而不是双引号,默认为false WriteMapNullValue 是否输出值为null的字段,238)"> WriteEnumUsingToString Enum输出name()或者original,238)"> UseISO8601DateFormat Date使用ISO8601格式输出,默认为false WriteNullListAsEmpty List字段如果为null,输出为[],而非null WriteNullStringAsEmpty 字符类型字段如果为null,输出为”“,238)"> WriteNullNumberAsZero 数值字段如果为null,输出为0,238)"> WriteNullBooleanAsFalse Boolean字段如果为null,输出为false,238)"> SkipTransientField 如果是true,类中的Get方法对应的Field是transient,序列化时将会被忽略。默认为true SortField 按字段名称排序后输出。默认为false WriteTabAsSpecial 把\t做转义输出,默认为false 不推荐
    PrettyFormat 结果是否格式化,238)"> 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方法

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. public class User {
    10.  
    11. private int id;
    12. private String name;
    13. private String add;
    14. private String old;
    15. }

    Word类型:缺省get、set方法

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    10. 10
    11. 11
    12. 12
    13. 13
    14. class Word {
    15.  
    16. private String d;
    17. private String e;
    18. private String f;
    19. private String a;
    20. int b;
    21. private boolean c;
    22. private Date date;
    23. private Map<String,Object> map;
    24. private List<User> list;
    25. }

    SerializerFeatureTest:测试类

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    98. 98
    99. 99
    100. 100
    101. 101
    102. 102
    103. 103
    104. 104
    105. 105
    106. 106
    107. 107
    108. 108
    109. 109
    110. 110
    111. 111
    112. 112
    113. 113
    114. 114
    115. 115
    116. 116
    117. 117
    118. 118
    119. 119
    120. 120
    121. 121
    122. 122
    123. 123
    124. 124
    125. 125
    126. 126
    127. 127
    128. 128
    129. 129
    130. 130
    131. 131
    132. 132
    133. 133
    134. 134
    135. 135
    136. 136
    137. 137
    138. 138
    139. 139
    140. 140
    141. 141
    142. 142
    143. 143
    144. 144
    145. 145
    146. 146
    147. 147
    148. 148
    149. 149
    150. 150
    151. 151
    152. 152
    153. 153
    154. 154
    155. 155
    156. 156
    157. 157
    158. 158
    159. 159
    160. 160
    161. 161
    162. 162
    163. 163
    164. 164
    165. 165
    166. 166
    167. 167
    168. 168
    169. 169
    170. 170
    171. 171
    172. 172
    173. 173
    174. 174
    175. 175
    176. 176
    177. 177
    178. 178
    179. 179
    180. 180
    181. 181
    182. 182
    183. public class SerializerFeatureTest {
    184.  
    185. static Word word;
    186.  
    187. static void init() {
    188. word = new Word();
    189. word.setA("a");
    190. word.setB(2);
    191. word.setC(true);
    192. word.setD("d");
    193. word.setE("");
    194. word.setF(null);
    195. word.setDate(new Date());
    196.  
    197. List<User> list = new ArrayList<User>();
    198. User user1 = new User();
    199. user1.setId(1);
    200. user1.setOld("11");
    201. user1.setName("用户1");
    202. user1.setAdd("北京");
    203. User user2 = new User();
    204. user2.setId(2);
    205. user2.setOld("22");
    206. user2.setName("用户2");
    207. user2.setAdd("上海");
    208. User user3 = new User();
    209. user3.setId(3);
    210. user3.setOld("33");
    211. user3.setName("用户3");
    212. user3.setAdd("广州");
    213.  
    214. list.add(user3);
    215. list.add(user2);
    216. list.add(null);
    217. list.add(user1);
    218.  
    219. word.setList(list);
    220.  
    221. Map<String,Object> map = new HashedMap();
    222. map.put("mapa","mapa");
    223. map.put("mapo",0); Box-sizing: border-Box;">"mapo");
    224. map.put("mapz",0); Box-sizing: border-Box;">"mapz");
    225. map.put("user1",user1);
    226. map.put("user3",user3);
    227. map.put("user4",null);
    228. map.put("list",list);
    229. word.setMap(map);
    230. }
    231.  
    232. void main(String[] args) {
    233. init();
    234. // useSingleQuotes();
    235. // writeMapNullValue();
    236. // useISO8601DateFormat();
    237. // writeNullListAsEmpty();
    238. // writeNullStringAsEmpty();
    239. // sortField();
    240. // prettyFormat();
    241. // writeDateUseDateFormat();
    242. // beanToArray();
    243. showJsonBySelf();
    244. }
    245.  
    246. /** * 9:自定义 * 格式化输出 * 显示值为null的字段 * 将为null的字段值显示为"" * DisableCircularReferenceDetect:消除循环引用 */
    247. void showJsonBySelf() {
    248. System.out.println(JSON.toJSONString(word));
    249. System.out.println(JSON.toJSONString(word,SerializerFeature.PrettyFormat,SerializerFeature.WriteMapNullValue,SerializerFeature.WriteNullStringAsEmpty,SerializerFeature.DisableCircularReferenceDetect,SerializerFeature.WriteNullListAsEmpty));
    250. }
    251.  
    252. /** * 8: * 将对象转为array输出 */
    253. void beanToArray() {
    254. word.setMap(null);
    255. word.setList(null);
    256. System.out.println(JSON.toJSONString(word));
    257. System.out.println(JSON.toJSONString(word,SerializerFeature.BeanToArray));
    258. }
    259.  
    260. /** * 7: * WriteDateUseDateFormat:全局修改日期格式,默认为false。 */
    261. void writeDateUseDateFormat() {
    262. word.setMap(null);
    263. System.out.println(JSON.toJSONString(word));
    264. JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd";
    265. System.out.println(JSON.toJSONString(word,SerializerFeature.WriteDateUseDateFormat));
    266. }
    267.  
    268. /** * 6: * PrettyFormat */
    269. void prettyFormat() {
    270. word.setMap(/** * SortField:按字段名称排序后输出。默认为false * 这里使用的是fastjson:为了更好使用sort field martch优化算法提升parser的性能,fastjson序列化的时候, * 缺省把SerializerFeature.SortField特性打开了。 * 反序列化的时候也缺省把SortFeidFastMatch的选项打开了。 * 这样,如果你用fastjson序列化的文本,输出的结果是按照fieldName排序输出的,parser时也能利用这个顺序进行优化读取。 * 这种情况下,parser能够获得非常好的性能。 */
    271. void sortField() {
    272. System.out.println(JSON.toJSONString(word));
    273. System.out.println(JSON.toJSONString(word,SerializerFeature.SortField));
    274. }
    275.  
    276. /** * 5: * WriteNullStringAsEmpty:字符类型字段如果为null,输出为"",而非null * 需要配合WriteMapNullValue使用,现将null输出 */
    277. void writeNullStringAsEmpty() {
    278. word.setE(null);
    279. System.out.println(JSONObject.toJSONString(word));
    280. System.out.println("设置WriteMapNullValue后:");
    281. System.out.println(JSONObject.toJSONString(word,SerializerFeature.WriteMapNullValue));
    282. System.out.println("设置WriteMapNullValue、WriteNullStringAsEmpty后:");
    283. System.out.println(JSONObject.toJSONString(word,SerializerFeature.WriteNullStringAsEmpty));
    284. }
    285.  
    286.  
    287. /** * 4: * WriteNullListAsEmpty:List字段如果为null,136); Box-sizing: border-Box;">void writeNullListAsEmpty() {
    288. word.setList("设置WriteNullListAsEmpty后:");
    289. System.out.println(JSONObject.toJSONString(word,0); Box-sizing: border-Box;">/** * 3: * UseISO8601DateFormat:Date使用ISO8601格式输出,默认为false */
    290. void useISO8601DateFormat() {
    291. System.out.println(JSONObject.toJSONString(word));
    292. System.out.println("设置UseISO8601DateFormat后:");
    293. System.out.println(JSONObject.toJSONString(word,SerializerFeature.UseISO8601DateFormat));
    294. }
    295.  
    296. /** * 2: * WriteMapNullValue:是否输出值为null的字段,默认为false */
    297. void writeMapNullValue() {
    298. System.out.println(JSONObject.toJSONString(word));
    299. System.out.println(/** * 1: * UseSingleQuotes:使用单引号而不是双引号,136); Box-sizing: border-Box;">void useSingleQuotes() {
    300. System.out.println(JSONObject.toJSONString(word));
    301. System.out.println("设置useSingleQuotes后:");
    302. System.out.println(JSONObject.toJSONString(word,SerializerFeature.UseSingleQuotes));
    303. }
    304. }

    对应输出结果如下:

    • 1、useSingleQuotes:

    • 2、writeMapNullValue:

    • 3、useISO8601DateFormat:

    • 4、writeNullListAsEmpty:

    • 5、writeNullStringAsEmpty:

    • 6、prettyFormat:

    • 7、writeDateUseDateFormat:

    • 8、beanToArray:

    • 9、自定义组合:showJsonBySelf:

      此时完整的输出如下:

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. {"a":"a","b":2,"c":true,"d":"d","date":1473839656840,"e":"","list":[{"add":"广州","id":3,"name":"用户3","old":"33"},{"add":"上海",0); Box-sizing: border-Box;">"用户2",0); Box-sizing: border-Box;">"22"},null,0); Box-sizing: border-Box;">"北京",102); Box-sizing: border-Box;">1,0); Box-sizing: border-Box;">"用户1",0); Box-sizing: border-Box;">"11"}],"map":{"list":[{"$ref":"$.list[0]"},{"$ref":"$.list[1]"},0); Box-sizing: border-Box;">"$.list[3]"}],"user3":{"$ref":"$.list[0]"},"mapz":"mapz","mapo":"mapo","mapa":"mapa","user1":{"$ref":"$.list[3]"}}}
    72. {
    73. "a":f":list":[ { "add":"33" },{ "add":"22" },0); Box-sizing: border-Box;">"11" } ],"map":{ "list":[ { "add":user4":null,"user3":{ "add":"33" },"user1":{ "add":"11" } } }

    注意:
    -fastjson把对象转化成json避免$ref

    学习地址:
    -http://www.jb51.cc/article/p-mwdewjxu-eh.html
    -http://blog.csdn.net/u013163567/article/details/50736096

    项目github地址:
    -https://github.com/gubaijin/buildmavenweb

    猜你在找的Json相关文章