Springboot 通过FastJson实现bean对象和Json字符串互转()

  本篇文章为你整理了Springboot 通过FastJson实现bean对象和Json字符串互转()的详细内容,包含有 Springboot 通过FastJson实现bean对象和Json字符串互转,希望能帮助你了解 Springboot 通过FastJson实现bean对象和Json字符串互转。

  纸上得来终觉浅,绝知此事要躬行 5LuW5b6I5bm46L+Q77yM55yf55qE77yM5bCx5ZKM5b2T5Yid55qE5oiR5LiA5qC35bm46L+Q

  
Json格式在后台服务中的重要性就不多说了,直入正题。
首先引入pom文件,这里使用的是1.2.83版本

  

1 dependency 

 

  2 groupId com.alibaba /groupId

  3 artifactId fastjson /artifactId

  4 version 1.2.83 /version

  5 /dependency

 

  接着我们尝试验证两种场景
1、Model对象转Json字符串
2、Json字符串转Model对象
在验证之前我们需要先编写一个model类,这个model类的字段我们可以使用fastJson中的注解@JSONField来修饰,并添加name值。
这个注解的作用,将该model类的字段和对应的json对象的key相对应起来。(防盗连接:本文首发自http:///jilodream/ )
当然你也可以不添加该注解,这样就相当于使用了字段名称本身与json对象的key建立映射。
为了尽可能的展示各种场景,我在下边的model 示例中,使用了好几种场景
1、注解的name值与字段值相同
2、注解的name值与字段值不同
3、不设置注解
4、作用在复杂引用类型上
5、作用在基本类型上
7、作用在容器上

  如图

  

 1 @Data

 

   2 public class ProjectModel {

   3 @JSONField(name = "projectName")

   4 private String projectName;

   5 @JSONField(name = "projectId")

   6 private int id;

   7 private List String userIdList;

   8 @JSONField(name = "userBeanList")

   9 private List User userList;

  10 @JSONField(name = "adminUser")

  11 private User adminUser;

  13 @Data

  14 public static class User {

  15 @JSONField(name = "user-id")

  16 private String userId;

  17 private String user_Name;

  19 }

 

  接下来我们开始验证:
场景一、Model对象转Json字符串

  

 1 @PostConstruct

 

   2 public void handleConvertJson() {

   3 ProjectModel projectModel= createProjectModel();

   4 String projectJson = JSON.toJSONString(projectModel);

   5 System.out.println(projectJson);

   9 private ProjectModel createProjectModel() {

  10 ProjectModel projectModel = new ProjectModel();

  11 projectModel.setId(999);

  12 projectModel.setProjectName("p-1");

  13 List String userIdList = new ArrayList ();

  14 userIdList.add("3");

  15 userIdList.add("2");

  16 userIdList.add("1");

  17 projectModel.setUserIdList(userIdList);

  19 ProjectModel.User adminUser=new ProjectModel.User();

  20 adminUser.setUser_Name("admin");

  21 adminUser.setUserId("0");

  22 projectModel.setAdminUser(adminUser);

  24 List ProjectModel.User userList = new ArrayList ();

  25 ProjectModel.User user3 = new ProjectModel.User();

  26 user3.setUserId("3");

  27 user3.setUser_Name("name3");

  28 userList.add(user3);

  29 ProjectModel.User user2 = new ProjectModel.User();

  30 user2.setUserId("2");

  31 user2.setUser_Name("name2");

  32 userList.add(user2);

  33 projectModel.setUserList(userList);

  34 return projectModel;

  35 }

 

  执行结果格式化后如下

  

 1 {

 

   2 "adminUser": {

   3 "user-id": "0",

   4 "user_Name": "admin"

   5 },

   6 "projectId": 999,

   7 "projectName": "p-1",

   8 "userBeanList": [

  10 "user-id": "3",

  11 "user_Name": "name3"

  12 },

  14 "user-id": "2",

  15 "user_Name": "name2"

  17 ],

  18 "userIdList": [

  19 "3",

  20 "2",

  21 "1"

  23 }

 

  注意看,(防盗连接:本文首发自http:///jilodream/ )如果model类字段设置了JSONField注解的话,则优先级最高,如果未设置该注解的话,则按照model类中字段的名称进行设置。而基本类型、复杂类型、复杂类型容器等场景均支持。
场景二、Model对象转Json字符串
新增代码如下:

  

 1 @PostConstruct

 

   2 public void handleJson2() {

   3 String newSourceJson="{\"projectId\":999,\"projectName\":\"p-1\"," +

   4 "\"userBeanList\":[{\"userId\":\"3\",\"user_Name\":\"name3\"},{\"user-id\":\"2\"," +

   5 "\"user_Name\":\"name2\"}],\"userIdList\":[\"3\",\"2\",\"1\"]}";

   6 ProjectModel newProject = JSONObject.parseObject(newSourceJson,

   7 ProjectModel.class);

   8 String newProjectJson = JSON.toJSONString(newProject);

   9 System.out.println(newSourceJson);

  10 System.out.println(newProjectJson);

  11 }

 

  Json串我们使用场景1的输出,但是稍作修改:删掉adminUser,同时注意userBeanList容器中的元素,两个id的key不一样,一个叫做userId(类字段名),一个叫做user-id(JSONField的name值)。然后再将对象转为Json串,用这两个Json串进行比较:

  经过转换后,userId字段消失了,这是由于null值不会被序列化出来的缘故。也从侧面证明了反序列化时,如果@JSONField存在的话,必须要与@JSONField值保持一致,否则字段值不会写入。如图:

  另外我们补充一个特殊情况情况,Model对象的字段为null转Json串时,如何保留null值:(防盗连接:本文首发自http:///jilodream/ )
注意第8行的转换增加了参数SerializerFeature.WriteMapNullValue

  

 1 @PostConstruct

 

   2 public void handleJson3() {

   3 String newSourceJson="{\"projectId\":999,\"projectName\":\"p-1\"," +

   4 "\"userBeanList\":[{\"userId\":\"3\",\"user_Name\":\"name3\"},{\"user-id\":\"2\"," +

   5 "\"user_Name\":\"name2\"}],\"userIdList\":[\"3\",\"2\",\"1\"]}";

   6 ProjectModel newProject = JSONObject.parseObject(newSourceJson,

   7 ProjectModel.class);

   8 String newProjectJson=JSON.toJSONString(newProject, SerializerFeature.WriteMapNullValue);

   9 System.out.println(newSourceJson);

  10 System.out.println(newProjectJson);

  11 }

 

  效果如下,生成的json串会保留null字段

  

  
如果你觉得写的不错,欢迎转载和点赞。

  转载时请保留作者署名jilodream/王若伊_恩赐解脱(博客链接:http:///jilodream/

  以上就是Springboot 通过FastJson实现bean对象和Json字符串互转()的详细内容,想要了解更多 Springboot 通过FastJson实现bean对象和Json字符串互转的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: