Java实体和JSON之间的相互转换

太过爱你忘了你带给我的痛 2024-03-22 10:36 141阅读 0赞

Java实体和JSON之间的相互转换

  • 一、先写一个测试用的Java实体
  • 二、将Java实体转化为Json
    • 1、基于com.alibaba.fastjson.JSON
      • (1)、JSON.toJSONString(user),会丢掉值为空的字段。
      • (2)、JSON.toJSONString(user, SerializerFeature.WriteMapNullValue),保留值为空的字段,并初始化为null。
      • (3)、JSON.toJSONString(user, SerializerFeature.WriteNonStringValueAsString),会将非空的字段值加上””,并丢掉没有初始化的字段。
      • (4)、JSON.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty),会将String类型的字段加上””,没有显示初始化的String类型参数保留,保留默认初始化为null的字段,同时丢掉其他未初始化的、非String类型的字段。
      • (5)、JSON.toJSONString(user, SerializerFeature.WriteNullListAsEmpty),会非空、String类型的字段加上””,保留默认初始化为null的字段,同时丢掉其他未初始化的、非String类型的字段。
      • (6)、JSON.toJSONString(user, SerializerFeature.QuoteFieldNames),转化之后的字段名会加上””,和默认一样。
      • (7)、JSON.toJSONString(user, SerializerFeature.WriteDateUseDateFormat),转化之后Date类型为传入格式,默认是时间戳。
      • (8)、JSON.toJSONString(user, SerializerFeature.WriteNullNumberAsZero),转化之后会将没有初始化的数字类型(BigDecimal、Float、Double)字段初始化为0,保留初始化为null的字段,丢掉其他类型未显示初始化的字段。
      • (9)、JSON.toJSONString(user, SerializerFeature.WriteNullBooleanAsFalse),转化之后会将没有初始化的Boolean类型字段初始化为false,保留初始化为null的字段,丢掉其他类型未显示初始化的字段。
      • (10)、JSON.toJSONString(user, SerializerFeature.PrettyFormat),格式化Json,丢掉其他未显示初始化的字段。
    • 2、基于com.alibaba.fastjson.JSONObject
    • 3、基于com.fasterxml.jackson.databind.ObjectMapper的writeValueAsString方法
    • 4、基于com.google.gson.Gson的toJson方法。
      • (1)、直接实例化一个Gson,将Java实体传入实例中的toJson,会丢掉没有初始化的字段。
      • (2)、在转化为json的同时,保留没有显示初始化的字段。
      • (3)、设置时间格式。
      • (4)、格式化输出。
  • 三、将Json转换为Java实体
    • 1、先拿到测试Json
    • 2、基于com.alibaba.fastjson.JSON
    • 3、基于com.alibaba.fastjson.JSONObject
    • 4、基于com.fasterxml.jackson.databind.ObjectMapper的readValue方法
    • 5、基于com.google.gson.Gson

一、先写一个测试用的Java实体

代码如下:

  1. import cn.hutool.core.date.DateUtil;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.alibaba.fastjson.serializer.SerializerFeature;
  5. import lombok.Data;
  6. import java.math.BigDecimal;
  7. import java.util.Date;
  8. /**
  9. * 测试用户类
  10. *
  11. * @author:gan
  12. * @date: 2023-04-28 15:33
  13. */
  14. @Data
  15. public class User {
  16. private String name;
  17. private Integer age;
  18. private Date birthday;
  19. private char sex;
  20. private Float height;
  21. private Double weight;
  22. private BigDecimal money;
  23. private Boolean adult;
  24. //下面这些初始化为空,用于后面测试效果时用
  25. private String nameDesc;
  26. private Integer ageDesc;
  27. private Date birthdayDesc;
  28. private char sexDesc;
  29. private Float heightDesc;
  30. private Double weightDesc;
  31. private BigDecimal moneyDesc;
  32. private Boolean adultDesc;
  33. public User() {
  34. }
  35. public User(String name, Integer age, Date birthday, char sex, Float height, Double weight, BigDecimal money, Boolean adult) {
  36. this.name = name;
  37. this.age = age;
  38. this.birthday = birthday;
  39. this.sex = sex;
  40. this.height = height;
  41. this.weight = weight;
  42. this.money = money;
  43. this.adult = adult;
  44. }
  45. }

初始化并输出一下:

  1. public static void main(String[] args) {
  2. User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
  3. System.out.println("toString方法:" + user);
  4. }

在这里插入图片描述
注意,如果没有使用“@Data”注解,一定要加上get和set方法,不然转化之后的Json是空的!

二、将Java实体转化为Json

1、基于com.alibaba.fastjson.JSON

主要是对SerializerFeature枚举类的使用,详细的可以看这个博客:

https://blog.csdn.net/xiang\_\_liu/article/details/81570923

或者看这里:

https://www.javadoc.io/static/com.alibaba/fastjson/1.2.2/com/alibaba/fastjson/serializer/SerializerFeature.html\#BeanToArray

下面是对SerializerFeature的使用演示:

(1)、JSON.toJSONString(user),会丢掉值为空的字段。

  1. User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
  2. System.out.println("toString方法:" + user);
  3. System.out.println("=================================JSON.toJSONString start================================");
  4. String jsonStr1 = JSON.toJSONString(user);
  5. System.out.println("jsonStr1:" + jsonStr1);

运行结果如下:

在这里插入图片描述
可以看到,直接使用toJSONString将Java实体转化为Json,会把没有显示初始化的字段丢掉。

“\u0000”是char类型的默认值,相对于null。

(2)、JSON.toJSONString(user, SerializerFeature.WriteMapNullValue),保留值为空的字段,并初始化为null。

加上“SerializerFeature.WriteMapNullValue”,会输出值为空的字段。

  1. User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
  2. System.out.println("toString方法:" + user);
  3. System.out.println("=================================JSON.toJSONString start================================");
  4. String jsonStr1 = JSON.toJSONString(user);
  5. System.out.println("jsonStr1:" + jsonStr1);
  6. String jsonStr2 = JSON.toJSONString(user, SerializerFeature.WriteMapNullValue);
  7. System.out.println("jsonStr2:" + jsonStr2);

运行结果如下:

在这里插入图片描述

(3)、JSON.toJSONString(user, SerializerFeature.WriteNonStringValueAsString),会将非空的字段值加上””,并丢掉没有初始化的字段。

  1. User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
  2. System.out.println("toString方法:" + user);
  3. System.out.println("=================================JSON.toJSONString start================================");
  4. String jsonStr1 = JSON.toJSONString(user);
  5. System.out.println("jsonStr1:" + jsonStr1);
  6. String jsonStr2 = JSON.toJSONString(user, SerializerFeature.WriteMapNullValue);
  7. System.out.println("jsonStr2:" + jsonStr2);
  8. String jsonStr3 = JSON.toJSONString(user, SerializerFeature.WriteNonStringValueAsString);
  9. System.out.println("jsonStr3:" + jsonStr3);

运行结果如下:

在这里插入图片描述

(4)、JSON.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty),会将String类型的字段加上””,没有显示初始化的String类型参数保留,保留默认初始化为null的字段,同时丢掉其他未初始化的、非String类型的字段。

  1. User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
  2. System.out.println("toString方法:" + user);
  3. System.out.println("=================================JSON.toJSONString start================================");
  4. String jsonStr1 = JSON.toJSONString(user);
  5. System.out.println("jsonStr1:" + jsonStr1);
  6. String jsonStr2 = JSON.toJSONString(user, SerializerFeature.WriteMapNullValue);
  7. System.out.println("jsonStr2:" + jsonStr2);
  8. String jsonStr3 = JSON.toJSONString(user, SerializerFeature.WriteNonStringValueAsString);
  9. System.out.println("jsonStr3:" + jsonStr3);
  10. String jsonStr4 = JSON.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty);
  11. System.out.println("jsonStr4:" + jsonStr4);

运行结果如下:

在这里插入图片描述

(5)、JSON.toJSONString(user, SerializerFeature.WriteNullListAsEmpty),会非空、String类型的字段加上””,保留默认初始化为null的字段,同时丢掉其他未初始化的、非String类型的字段。

  1. User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
  2. System.out.println("toString方法:" + user);
  3. System.out.println("=================================JSON.toJSONString start================================");
  4. String jsonStr1 = JSON.toJSONString(user);
  5. System.out.println("jsonStr1:" + jsonStr1);
  6. String jsonStr2 = JSON.toJSONString(user, SerializerFeature.WriteMapNullValue);
  7. System.out.println("jsonStr2:" + jsonStr2);
  8. String jsonStr3 = JSON.toJSONString(user, SerializerFeature.WriteNonStringValueAsString);
  9. System.out.println("jsonStr3:" + jsonStr3);
  10. String jsonStr4 = JSON.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty);
  11. System.out.println("jsonStr4:" + jsonStr4);
  12. String jsonStr5 = JSON.toJSONString(user, SerializerFeature.WriteNullListAsEmpty);
  13. System.out.println("jsonStr5:" + jsonStr5);

运行结果如下:
在这里插入图片描述

(6)、JSON.toJSONString(user, SerializerFeature.QuoteFieldNames),转化之后的字段名会加上””,和默认一样。

  1. User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
  2. System.out.println("toString方法:" + user);
  3. System.out.println("=================================JSON.toJSONString start================================");
  4. String jsonStr1 = JSON.toJSONString(user);
  5. System.out.println("jsonStr1:" + jsonStr1);
  6. String jsonStr2 = JSON.toJSONString(user, SerializerFeature.WriteMapNullValue);
  7. System.out.println("jsonStr2:" + jsonStr2);
  8. String jsonStr3 = JSON.toJSONString(user, SerializerFeature.WriteNonStringValueAsString);
  9. System.out.println("jsonStr3:" + jsonStr3);
  10. String jsonStr4 = JSON.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty);
  11. System.out.println("jsonStr4:" + jsonStr4);
  12. String jsonStr5 = JSON.toJSONString(user, SerializerFeature.WriteNullListAsEmpty);
  13. System.out.println("jsonStr5:" + jsonStr5);
  14. String jsonStr6 = JSON.toJSONString(user, SerializerFeature.QuoteFieldNames);
  15. System.out.println("jsonStr6:" + jsonStr6);

运行结果如下:

在这里插入图片描述

(7)、JSON.toJSONString(user, SerializerFeature.WriteDateUseDateFormat),转化之后Date类型为传入格式,默认是时间戳。

  1. User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
  2. System.out.println("toString方法:" + user);
  3. System.out.println("=================================JSON.toJSONString start================================");
  4. String jsonStr1 = JSON.toJSONString(user);
  5. System.out.println("jsonStr1:" + jsonStr1);
  6. String jsonStr2 = JSON.toJSONString(user, SerializerFeature.WriteMapNullValue);
  7. System.out.println("jsonStr2:" + jsonStr2);
  8. String jsonStr3 = JSON.toJSONString(user, SerializerFeature.WriteNonStringValueAsString);
  9. System.out.println("jsonStr3:" + jsonStr3);
  10. String jsonStr4 = JSON.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty);
  11. System.out.println("jsonStr4:" + jsonStr4);
  12. String jsonStr5 = JSON.toJSONString(user, SerializerFeature.WriteNullListAsEmpty);
  13. System.out.println("jsonStr5:" + jsonStr5);
  14. String jsonStr6 = JSON.toJSONString(user, SerializerFeature.QuoteFieldNames);
  15. System.out.println("jsonStr6:" + jsonStr6);
  16. String jsonStr7 = JSON.toJSONString(user, SerializerFeature.WriteDateUseDateFormat);
  17. System.out.println("jsonStr7:" + jsonStr7);

运行结果如下:

在这里插入图片描述

(8)、JSON.toJSONString(user, SerializerFeature.WriteNullNumberAsZero),转化之后会将没有初始化的数字类型(BigDecimal、Float、Double)字段初始化为0,保留初始化为null的字段,丢掉其他类型未显示初始化的字段。

  1. User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
  2. System.out.println("toString方法:" + user);
  3. System.out.println("=================================JSON.toJSONString start================================");
  4. String jsonStr1 = JSON.toJSONString(user);
  5. System.out.println("jsonStr1:" + jsonStr1);
  6. String jsonStr2 = JSON.toJSONString(user, SerializerFeature.WriteMapNullValue);
  7. System.out.println("jsonStr2:" + jsonStr2);
  8. String jsonStr3 = JSON.toJSONString(user, SerializerFeature.WriteNonStringValueAsString);
  9. System.out.println("jsonStr3:" + jsonStr3);
  10. String jsonStr4 = JSON.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty);
  11. System.out.println("jsonStr4:" + jsonStr4);
  12. String jsonStr5 = JSON.toJSONString(user, SerializerFeature.WriteNullListAsEmpty);
  13. System.out.println("jsonStr5:" + jsonStr5);
  14. String jsonStr6 = JSON.toJSONString(user, SerializerFeature.QuoteFieldNames);
  15. System.out.println("jsonStr6:" + jsonStr6);
  16. String jsonStr7 = JSON.toJSONString(user, SerializerFeature.WriteDateUseDateFormat);
  17. System.out.println("jsonStr7:" + jsonStr7);
  18. String jsonStr8 = JSON.toJSONString(user, SerializerFeature.WriteNullNumberAsZero);
  19. System.out.println("jsonStr8:" + jsonStr8);

运行结果如下:

在这里插入图片描述

(9)、JSON.toJSONString(user, SerializerFeature.WriteNullBooleanAsFalse),转化之后会将没有初始化的Boolean类型字段初始化为false,保留初始化为null的字段,丢掉其他类型未显示初始化的字段。

  1. User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
  2. System.out.println("toString方法:" + user);
  3. System.out.println("=================================JSON.toJSONString start================================");
  4. String jsonStr1 = JSON.toJSONString(user);
  5. System.out.println("jsonStr1:" + jsonStr1);
  6. String jsonStr2 = JSON.toJSONString(user, SerializerFeature.WriteMapNullValue);
  7. System.out.println("jsonStr2:" + jsonStr2);
  8. String jsonStr3 = JSON.toJSONString(user, SerializerFeature.WriteNonStringValueAsString);
  9. System.out.println("jsonStr3:" + jsonStr3);
  10. String jsonStr4 = JSON.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty);
  11. System.out.println("jsonStr4:" + jsonStr4);
  12. String jsonStr5 = JSON.toJSONString(user, SerializerFeature.WriteNullListAsEmpty);
  13. System.out.println("jsonStr5:" + jsonStr5);
  14. String jsonStr6 = JSON.toJSONString(user, SerializerFeature.QuoteFieldNames);
  15. System.out.println("jsonStr6:" + jsonStr6);
  16. String jsonStr7 = JSON.toJSONString(user, SerializerFeature.WriteDateUseDateFormat);
  17. System.out.println("jsonStr7:" + jsonStr7);
  18. String jsonStr8 = JSON.toJSONString(user, SerializerFeature.WriteNullNumberAsZero);
  19. System.out.println("jsonStr8:" + jsonStr8);
  20. String jsonStr9 = JSON.toJSONString(user, SerializerFeature.WriteNullBooleanAsFalse);
  21. System.out.println("jsonStr9:" + jsonStr9);

运行结果如下:

在这里插入图片描述

(10)、JSON.toJSONString(user, SerializerFeature.PrettyFormat),格式化Json,丢掉其他未显示初始化的字段。

  1. User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
  2. System.out.println("toString方法:" + user);
  3. System.out.println("=================================JSON.toJSONString start================================");
  4. String jsonStr1 = JSON.toJSONString(user);
  5. System.out.println("jsonStr1:" + jsonStr1);
  6. String jsonStr2 = JSON.toJSONString(user, SerializerFeature.WriteMapNullValue);
  7. System.out.println("jsonStr2:" + jsonStr2);
  8. String jsonStr3 = JSON.toJSONString(user, SerializerFeature.WriteNonStringValueAsString);
  9. System.out.println("jsonStr3:" + jsonStr3);
  10. String jsonStr4 = JSON.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty);
  11. System.out.println("jsonStr4:" + jsonStr4);
  12. String jsonStr5 = JSON.toJSONString(user, SerializerFeature.WriteNullListAsEmpty);
  13. System.out.println("jsonStr5:" + jsonStr5);
  14. String jsonStr6 = JSON.toJSONString(user, SerializerFeature.QuoteFieldNames);
  15. System.out.println("jsonStr6:" + jsonStr6);
  16. String jsonStr7 = JSON.toJSONString(user, SerializerFeature.WriteDateUseDateFormat);
  17. System.out.println("jsonStr7:" + jsonStr7);
  18. String jsonStr8 = JSON.toJSONString(user, SerializerFeature.WriteNullNumberAsZero);
  19. System.out.println("jsonStr8:" + jsonStr8);
  20. String jsonStr9 = JSON.toJSONString(user, SerializerFeature.WriteNullBooleanAsFalse);
  21. System.out.println("jsonStr9:" + jsonStr9);
  22. String jsonStr10 = JSON.toJSONString(user, SerializerFeature.PrettyFormat);
  23. System.out.println("jsonStr10:" + jsonStr10);

运行结果如下:

在这里插入图片描述

2、基于com.alibaba.fastjson.JSONObject

JSONObject是JSON的子类,并且没有重写“toJSONString”方法,所以效果是一样的。
在这里插入图片描述

代码如下:

  1. User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
  2. System.out.println("toString方法:" + user);
  3. System.out.println("=================================JSONObject.toJSONString start================================");
  4. String jsonObjectStr1 = JSONObject.toJSONString(user);
  5. System.out.println("jsonObjectStr1:" + jsonObjectStr1);
  6. String jsonObjectStr2 = JSONObject.toJSONString(user, SerializerFeature.WriteMapNullValue);
  7. System.out.println("jsonObjectStr2:" + jsonObjectStr2);
  8. String jsonObjectStr3 = JSONObject.toJSONString(user, SerializerFeature.WriteNonStringValueAsString);
  9. System.out.println("jsonObjectStr3:" + jsonObjectStr3);
  10. String jsonObjectStr4 = JSONObject.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty);
  11. System.out.println("jsonObjectStr4:" + jsonObjectStr4);
  12. String jsonObjectStr5 = JSONObject.toJSONString(user, SerializerFeature.WriteNullListAsEmpty);
  13. System.out.println("jsonObjectStr5:" + jsonObjectStr5);
  14. String jsonObjectStr6 = JSONObject.toJSONString(user, SerializerFeature.QuoteFieldNames);
  15. System.out.println("jsonObjectStr6:" + jsonObjectStr6);
  16. String jsonObjectStr7 = JSONObject.toJSONString(user, SerializerFeature.WriteDateUseDateFormat);
  17. System.out.println("jsonObjectStr7:" + jsonObjectStr7);
  18. String jsonObjectStr8 = JSONObject.toJSONString(user, SerializerFeature.WriteNullNumberAsZero);
  19. System.out.println("jsonObjectStr8:" + jsonObjectStr8);
  20. String jsonObjectStr9 = JSONObject.toJSONString(user, SerializerFeature.WriteNullBooleanAsFalse);
  21. System.out.println("jsonObjectStr9:" + jsonObjectStr9);
  22. String jsonObjectStr10 = JSONObject.toJSONString(user, SerializerFeature.PrettyFormat);
  23. System.out.println("jsonObjectStr10:" + jsonObjectStr10);
  24. System.out.println("=================================JSONObject.toJSONString end================================");

在这里插入图片描述

3、基于com.fasterxml.jackson.databind.ObjectMapper的writeValueAsString方法

代码如下:

  1. User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
  2. System.out.println("toString方法:" + user);
  3. ObjectMapper objectMapper = new ObjectMapper();
  4. try {
  5. String objectMapperStr = objectMapper.writeValueAsString(user);
  6. System.out.println("objectMapperStr:" + objectMapperStr);
  7. } catch (JsonProcessingException e) {
  8. e.printStackTrace();
  9. }

运行结果如下:

在这里插入图片描述
writeValueAsString方法会保留没有显示初始化的的字段,除了char类型初始化值为“\u0000”,其他都为“null”。

4、基于com.google.gson.Gson的toJson方法。

(1)、直接实例化一个Gson,将Java实体传入实例中的toJson,会丢掉没有初始化的字段。

  1. User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
  2. System.out.println("toString方法:" + user);
  3. Gson gson = new Gson();
  4. String gsonStr1 = gson.toJson(user);
  5. System.out.println("gsonStr1:" + gsonStr1);

运行结果如下:

在这里插入图片描述
char类型还是保留下来了。

(2)、在转化为json的同时,保留没有显示初始化的字段。

“Gson gson = new Gson();”只能简单地将Java实体转为json,要保留没有显示初始化的字段,需要用到“GsonBuilder”初始化“Gson”,代码如下:

  1. User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
  2. System.out.println("toString方法:" + user);
  3. Gson gson = new GsonBuilder()
  4. .serializeNulls()
  5. .create();
  6. String gsonStr1 = gson.toJson(user);
  7. System.out.println("gsonStr1:" + gsonStr1);

运行结果如下:

在这里插入图片描述
可以看到没有显示初始化的字段都保留下来了,并且值都为“null”。

(3)、设置时间格式。

上面可以看到时间格式默认是国际化格式,想要转换为“yyyy年MM月dd日 时:分:秒”怎么办?可以使用“setDateFormat”格式化时间,代码如下:

  1. User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
  2. System.out.println("toString方法:" + user);
  3. Gson gson = new GsonBuilder()
  4. .serializeNulls()
  5. .setDateFormat("yyyy年MM月dd日 HH:mm:ss")
  6. .create();
  7. String gsonStr1 = gson.toJson(user);
  8. System.out.println("gsonStr1:" + gsonStr1);

运行结果如下:

在这里插入图片描述
可以看到时间已经转换为目标格式。

(4)、格式化输出。

如果觉得转换之后的json只有一行不好看,可以使用“setPrettyPrinting”格式化json的格式,代码如下:

  1. User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
  2. System.out.println("toString方法:" + user);
  3. Gson gson = new GsonBuilder()
  4. .serializeNulls()
  5. .setDateFormat("yyyy年MM月dd日 HH:mm:ss")
  6. .setPrettyPrinting()
  7. .create();
  8. String gsonStr1 = gson.toJson(user);
  9. System.out.println("gsonStr1:" + gsonStr1);

运行结果如下:

在这里插入图片描述

三、将Json转换为Java实体

1、先拿到测试Json

拿到测试用的Java实体转化为Json,格式化后如下:

  1. {
  2. "adult": true,
  3. "adultDesc": null,
  4. "age": 25,
  5. "ageDesc": null,
  6. "birthday": 908169922000,
  7. "birthdayDesc": null,
  8. "height": 180.0,
  9. "heightDesc": null,
  10. "money": 2104.5,
  11. "moneyDesc": null,
  12. "name": "王宇",
  13. "nameDesc": null,
  14. "sex": "男",
  15. "sexDesc": "\u0000",
  16. "weight": 71.55,
  17. "weightDesc": null
  18. }

2、基于com.alibaba.fastjson.JSON

使用JSON的parseObject(String text, Class clazz)方法可以直接将Json字符转化为对应clazz的Java实体,代码如下:

  1. String userJson = "{\"adult\":true,\"adultDesc\":null,\"age\":25,\"ageDesc\":null,\"birthday\":908169922000,\"birthdayDesc\":null,\"height\":180.0,\"heightDesc\":null,\"money\":2104.5,\"moneyDesc\":null,\"name\":\"王宇\",\"nameDesc\":null,\"sex\":\"男\",\"sexDesc\":\"\\u0000\",\"weight\":71.55,\"weightDesc\":null}";
  2. System.out.println("userJson:" + userJson);
  3. User user = JSON.parseObject(userJson, User.class);
  4. System.out.println("user:" + user);

运行结果如下:

在这里插入图片描述

3、基于com.alibaba.fastjson.JSONObject

JSONObject中转化Java实体的方法parseObject也是来自JSON,并且没有重写,效果是一样的,代码如下:

  1. String userJson = "{\"adult\":true,\"adultDesc\":null,\"age\":25,\"ageDesc\":null,\"birthday\":908169922000,\"birthdayDesc\":null,\"height\":180.0,\"heightDesc\":null,\"money\":2104.5,\"moneyDesc\":null,\"name\":\"王宇\",\"nameDesc\":null,\"sex\":\"男\",\"sexDesc\":\"\\u0000\",\"weight\":71.55,\"weightDesc\":null}";
  2. System.out.println("userJson:" + userJson);
  3. User user = JSONObject.parseObject(userJson, User.class);
  4. System.out.println("user:" + user);

运行结果如下:

在这里插入图片描述

4、基于com.fasterxml.jackson.databind.ObjectMapper的readValue方法

需要先实例化ObjectMapper,再调用readValue方法,代码如下:

  1. String userJson = "{\"adult\":true,\"adultDesc\":null,\"age\":25,\"ageDesc\":null,\"birthday\":908169922000,\"birthdayDesc\":null,\"height\":180.0,\"heightDesc\":null,\"money\":2104.5,\"moneyDesc\":null,\"name\":\"王宇\",\"nameDesc\":null,\"sex\":\"男\",\"sexDesc\":\"\\u0000\",\"weight\":71.55,\"weightDesc\":null}";
  2. System.out.println("userJson:" + userJson);
  3. ObjectMapper objectMapper = new ObjectMapper();
  4. try {
  5. User user = objectMapper.readValue(userJson, User.class);
  6. System.out.println("user:" + user);
  7. } catch (JsonProcessingException e) {
  8. e.printStackTrace();
  9. }

运行结果如下:

在这里插入图片描述

5、基于com.google.gson.Gson

Gson实例化后,使用fromJson方法将Json转化为Java实体,代码如下:

  1. String userJson = "{\"adult\":true,\"adultDesc\":null,\"age\":25,\"ageDesc\":null,\"birthday\":908169922000,\"birthdayDesc\":null,\"height\":180.0,\"heightDesc\":null,\"money\":2104.5,\"moneyDesc\":null,\"name\":\"王宇\",\"nameDesc\":null,\"sex\":\"男\",\"sexDesc\":\"\\u0000\",\"weight\":71.55,\"weightDesc\":null}";
  2. System.out.println("userJson:" + userJson);
  3. Gson gson = new Gson();
  4. User user = gson.fromJson(userJson, User.class);
  5. System.out.println("user:" + user);

运行结果如下:
在这里插入图片描述
可以看到时间戳转Date类型报错了。

需要使用GsonBuilder进行实例化,在适配一下Date类型的字段。代码如下:

  1. String userJson = "{\"adult\":true,\"adultDesc\":null,\"age\":25,\"ageDesc\":null,\"birthday\":908169922000,\"birthdayDesc\":null,\"height\":180.0,\"heightDesc\":null,\"money\":2104.5,\"moneyDesc\":null,\"name\":\"王宇\",\"nameDesc\":null,\"sex\":\"男\",\"sexDesc\":\"\\u0000\",\"weight\":71.55,\"weightDesc\":null}";
  2. System.out.println("userJson:" + userJson);
  3. Gson gson = new GsonBuilder()
  4. .registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
  5. @Override
  6. public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
  7. return new Date(json.getAsJsonPrimitive().getAsLong());
  8. }
  9. })
  10. .create();
  11. User user = gson.fromJson(userJson, User.class);
  12. System.out.println("user:" + user);

再次运行:

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,141人围观)

还没有评论,来说两句吧...

相关阅读