当前位置:   article > 正文

fastJson的使用_fastjson putifabsent

fastjson putifabsent

介绍

    fastJson是阿里开发的一款专门用于Java开发的包,可以方便的实现json对象与JavaBean对象的转换,实现JavaBean对象与json字符串的转换,实现json对象与json字符串的转换。

Mavan依赖

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>fastjson</artifactId>
  4. <version>1.2.74</version>
  5. </dependency>

Demo

  1. import com.alibaba.fastjson.JSON;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.alibaba.fastjson.TypeReference;
  4. import com.alibaba.fastjson.serializer.SerializerFeature;
  5. import json.DateFormat;
  6. import json.User;
  7. import org.junit.Test;
  8. import java.util.Date;
  9. import java.util.HashMap;
  10. import java.util.List;
  11. import java.util.Map;
  12. /**
  13. * @describe: fastjson是阿里开发的一款专门用于Java开发的包,可以方便的实现json对象与JavaBean对象的转换,
  14. * 实现JavaBean对象与json字符串的转换,实现json对象与json字符串的转换。
  15. * @author: houkai
  16. */
  17. public class FastJsonDemo {
  18. /**
  19. * 序列化和反序列化
  20. */
  21. @Test
  22. public void aTest() {
  23. User user = User.init();
  24. System.out.println(JSON.toJSONString(user));
  25. String json = "{\"age\":19,\"homeAddress\":\"陕西西安\",\"name\":\"张三\",\"sex\":true}";
  26. user = JSON.parseObject(json, User.class);
  27. System.out.println(user.toString());
  28. }
  29. /**
  30. * 泛型 反序列化支持
  31. * 可以通过 TypeReference 指定类型
  32. */
  33. @Test
  34. public void bTest() {
  35. String jsonss = "[\"1\",\"2\",\"3\"]";
  36. List obj = JSON.parseObject(jsonss, new TypeReference<List<String>>() {
  37. });
  38. System.out.println(obj);
  39. }
  40. /**
  41. * 时间序列化和反序列化
  42. * 反序列化能够自动识别如下日期格式:
  43. * ISO-8601日期格式
  44. * yyyy-MM-dd
  45. * yyyy-MM-dd HH:mm:ss
  46. * yyyy-MM-dd HH:mm:ss.SSS
  47. * 毫秒数字
  48. * 毫秒数字字符串
  49. * .NET JSON日期格式
  50. * new Date(1982932381111)
  51. */
  52. @Test
  53. public void cTest() {
  54. //反序列化
  55. String dateFormatStr = "{\"d\":\"2019-09-09 09:09:09\"}";
  56. DateFormat dateFormat = JSON.parseObject(dateFormatStr, DateFormat.class);
  57. //序列化
  58. String str = JSON.toJSONStringWithDateFormat(dateFormat, "yyyy-MM-dd HH:mm:ss");
  59. System.out.println(str);
  60. }
  61. /**
  62. * 使用 @JSONField(name="") 对属性进行序列化或者反序列化时的重命名
  63. */
  64. @Test
  65. public void dTest() {
  66. String str = "{\"xingming\":\"zha\"}";
  67. SerialReName serialReName = JSON.parseObject(str, SerialReName.class);
  68. System.out.println(serialReName);
  69. }
  70. /**
  71. * 对null值的处理
  72. * QuoteFieldNames———-输出key时是否使用双引号,默认为true
  73. * WriteMapNullValue——–是否输出值为null的字段,默认为false
  74. * WriteNullNumberAsZero—-数值字段如果为null,输出为0,而非null
  75. * WriteNullListAsEmpty—–List字段如果为null,输出为[],而非null
  76. * WriteNullStringAsEmpty—字符类型字段如果为null,输出为"",而非null
  77. * WriteNullBooleanAsFalse–Boolean字段如果为null,输出为false,而非null
  78. */
  79. @Test
  80. public void eTest() {
  81. Map<String, Object> jsonMap = new HashMap<String, Object>();
  82. jsonMap.put("a", 1);
  83. jsonMap.put("b", "");
  84. jsonMap.put("c", null);
  85. String str = JSONObject.toJSONString(jsonMap, SerializerFeature.WriteMapNullValue);
  86. System.out.println(str);
  87. }
  88. /**
  89. * JSON 操作
  90. */
  91. @Test
  92. public void fTest() {
  93. JSONObject object = new JSONObject();
  94. object.putIfAbsent("key", "value"); //不会覆盖
  95. object.put("key", new Date()); //会覆盖
  96. System.out.println(object.toJSONString());
  97. }
  98. /*关于内部类不序列化
  99. fastJson 内部类一定是static内部类,且字段为public,否则不能序列化数据到内部类字段上。
  100. demo:
  101. public class PersonVO {
  102. public Customer xxx;
  103. public static class Customer{
  104. public Long customerId;
  105. public String customerName;
  106. }
  107. }
  108. */
  109. /*忽略属性
  110. * FastJson序列化时(即转成JSON字符串时),可以过滤掉部分字段,或者只保留部分字段
  111. *
  112. * 方法一:FastJson的注解
  113. * @JSONField(serialize = false)
  114. * private String name;
  115. *
  116. * 方法二:JAVA关键字, 在实体字段前面,使用transient关键字,表示该字段不参与序列化,转JSON字符串时就可以忽略掉该字段。
  117. * 因为是JAVA关键字所以也会影响该字段其他序列化操作。
  118. * @JSONField(name = "AGE")
  119. * private transient String age;
  120. *
  121. * 方法三:FastJson的属性名过滤器SimplePropertyPreFilter,来过滤/指定的属性名,然后在转JSON的时候,带上过滤器参数即可。
  122. *
  123. * SimplePropertyPreFilter filter = new SimplePropertyPreFilter();
  124. * filter.getExcludes().add("PHONE");
  125. * System.out.println(JSONObject.toJSONString(u, filter));
  126. * 如果需要保留的参数比较少,也可以反过来,使用 filter.getIncludes().add("PHONE");
  127. * */
  128. }
  1. import com.alibaba.fastjson.annotation.JSONField;
  2. public class SerialReName {
  3. @JSONField(name = "xingming")
  4. private String name;
  5. @Override
  6. public String toString() {
  7. return "SerialReName{" +
  8. "name='" + name + '\'' +
  9. '}';
  10. }
  11. }
  12. public class DateFormat {
  13. private Date d;
  14. @Override
  15. public String toString() {
  16. return "DateFormat{" +
  17. "d=" + d +
  18. '}';
  19. }
  20. }
  21. public class User {
  22. private String name;
  23. private boolean sex;
  24. private int age;
  25. private String homeAddress;
  26. public User(String name, boolean sex, int age, String homeAddress) {
  27. this.name = name;
  28. this.sex = sex;
  29. this.age = age;
  30. this.homeAddress = homeAddress;
  31. }
  32. public static User init(){
  33. return new User("张三", true, 19, "陕西西安");
  34. }
  35. @Override
  36. public String toString() {
  37. return "User{" +
  38. "name='" + name + '\'' +
  39. ", sex=" + sex +
  40. ", age=" + age +
  41. ", homeAddress='" + homeAddress + '\'' +
  42. '}';
  43. }
  44. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/532691
推荐阅读
  

闽ICP备14008679号