网站里可以增加网址吗,佛山找企业的网站,小学网站建设情况说明,南京seo新浪Jackson是Spring Boot默认的JSON数据处理框架#xff0c;但是其并不依赖于任何的Spring 库。有的小伙伴以为Jackson只能在Spring框架内使用#xff0c;其实不是的#xff0c;没有这种限制。它提供了很多的JSON数据处理方法、注解#xff0c;也包括流式API、树模型、数据绑定… Jackson是Spring Boot默认的JSON数据处理框架但是其并不依赖于任何的Spring 库。有的小伙伴以为Jackson只能在Spring框架内使用其实不是的没有这种限制。它提供了很多的JSON数据处理方法、注解也包括流式API、树模型、数据绑定以及复杂数据类型转换等功能。它虽然简单易用但绝对不是小玩具本节为大家介绍Jackson的基础核心用法更多的内容我会写成一个系列5-10篇文章请您继续关注我。 一、基础准备 在任意项目中引入下面的jar就可以使用jackson进行JSON的数据序列化与反序列化的功能。 dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.9.8/version
/dependency写一个PlayerStar的实体类实体类主要体现篮球明星的名字、年龄、业余爱好、朋友、年收入等信息为了尽可能地演示Jackson的序列化与反序列化功能将数组、List、Map都融合到这个类里面。并通过getInstance初始化篮球明星Jordan这个对象。 Data
public class PlayerStar {private String name;private Integer age;private String[] hobbies; //业余爱好,数组private ListString friends; // 朋友private MapString, BigDecimal salary; //年收入 Map//初始化一个对象用于测试public static PlayerStar getInstance(){PlayerStar playerStar new PlayerStar();playerStar.setName(乔丹);playerStar.setAge(45);playerStar.setHobbies(new String[]{高尔夫球, 棒球});MapString, BigDecimal salary new HashMapString, BigDecimal() {{put(2000, new BigDecimal(10000000));put(2010, new BigDecimal(62000000));put(2020, new BigDecimal(112400000));}};playerStar.setSalary(salary);playerStar.setFriends(Arrays.asList(kobe, curry, james));return playerStar;}}二、序列化方法 下面代码演示了如何将PlayerStar对象序列化为JSON字符串。 writeValue可以接收File作为参数将JSON序列化结果保存到文件中writeValueAsString将JSON序列化结果以String形式返回writerWithDefaultPrettyPrinter方法可以将JSON序列化结果进行格式化更好的显示结构易于查看Test
void testObject2JSON() throws IOException {//获取对象实例PlayerStar player PlayerStar.getInstance();//ObjectMapper作为Jackson的API工具类存在ObjectMapper mapper new ObjectMapper();//将player对象以JSON格式进行序列化并将序列化结果写入文件mapper.writeValue(new File(d:datajacksonplayer.json), player);//将player对象以JSON格式进行序列化为String对象String jsonString mapper.writeValueAsString(player);System.out.println(jsonString);//将player对象以JSON格式进行序列化为String对象(格式美化)String jsonInString2 mapper.writerWithDefaultPrettyPrinter().writeValueAsString(player);System.out.println(jsonInString2);
}jsonString的控制台打印输出结果也是d:datajacksonplayer.json文件的内容 {name:乔丹,age:45,hobbies:[高尔夫球,棒球],friends:[kobe,curry,james],salary:{2000:10000000,2010:62000000,2020:112400000}}jsonString2的控制台打印输出格式进行了美化因为使用了writerWithDefaultPrettyPrinter()方法 {name : 乔丹,age : 45,hobbies : [ 高尔夫球, 棒球 ],friends : [ kobe, curry, james ],salary : {2000 : 10000000,2010 : 62000000,2020 : 112400000}
}三、反序列化方法 下面代码演示了如何将JSON字符串反序列化为Java对象 Test
void testJSON2Object() throws IOException {ObjectMapper mapper new ObjectMapper();//从文件中读取JSON字符串反序列化为java对象PlayerStar player mapper.readValue(new File(d:datajacksonplayer.json), PlayerStar.class);System.out.println(player);//将JSON字符串反序列化为java对象String jsonInString {name:乔丹,age:45,hobbies:[高尔夫球,棒球]};PlayerStar jordan mapper.readValue(jsonInString, PlayerStar.class);System.out.println(jordan);}PlayerStar对象控制台输出结果如下(注意这里的输出不是JSON格式而是java对象的toString()方法值) PlayerStar(name乔丹, age45, hobbies[高尔夫球, 棒球], friends[kobe, curry, james], salary{200010000000, 201062000000, 2020112400000})
PlayerStar(name乔丹, age45, hobbies[高尔夫球, 棒球], friendsnull, salarynull)四、字段重命名JsonProperty 可以使用 JsonProperty来影响序列化和反序列化对象属性的重命名。 Data
public class PlayerStar {JsonProperty(playerName)private String name; //将属性name序列化为playerName同时影响反序列化使用上面代码的注解之后JSON序列化的结果name属性变成playerName属性 {playerName:乔丹 ……同时影响反序列化,下面的反序列化代码会报错因为使用了name属性。应该使用playerName才可以。 String jsonInString {name:乔丹,age:45,hobbies:[高尔夫球,棒球]};
PlayerStar jordan mapper.readValue(jsonInString, PlayerStar.class);五、忽略null字段的序列化JsonInclude 当我们不为对象的成员变量赋值的时候默认情况下Jackson的序列化结果是下面的这样的。 {age : 45,hobbies : null,friends : null,salary : null,playerName : 乔丹
}如果我们不希望将null值体现在JSON序列化结果中我们可以使用下面的方法。如果希望在某次序列化的全局范围内忽略null成员变量可以使用下面的API ObjectMapper mapper new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); 或者是在类名的上面加上如下注解。该注解将针对类里面的所有成员变量生效只要成员变量为null将不会被包含在序列化结果中。 JsonInclude(JsonInclude.Include.NON_NULL)
public class PlayerStar {......
}如果我们想针对PlayerStar类里面某些成员变量单独忽略null可以在成员变量上面加注解。 JsonInclude(JsonInclude.Include.NON_NULL)
private String[] hobbies; //业余爱好,数组
JsonInclude(JsonInclude.Include.NON_NULL)
private ListString friends; // 朋友
JsonInclude(JsonInclude.Include.NON_NULL)
private MapString, BigDecimal salary; //年收入 Map忽略为null的成员变量后,JSON序列化结果是下面这样的 {age : 45,playerName : 乔丹
}六、忽略指定的字段 默认情况下jackson不会将static和transient的成员变量进行序列化与反序列化操作。我们还可以通过 JsonIgnore加在类成员变量上面该成员变量将被排除在序列化和反序列化的过程之外JsonIgnoreProperties加在类声明上面指定该类里面哪些字段被排除在序列化和反序列化的过程之外上面的两种注解选其一即可下面的代码两种注解我都用了功能是重复的 Data
JsonIgnoreProperties({hobbies, friends,salary})
public class PlayerStar {JsonProperty(playerName)private String name;private Integer age;JsonIgnoreprivate String[] hobbies; //业余爱好,数组JsonIgnoreprivate ListString friends; // 朋友JsonIgnoreprivate MapString, BigDecimal salary; //年收入 Map......在类或成员变量上面加上注解之后序列化结果如下指定字段被忽略。 {age : 45,playerName : 乔丹
}需要注意的是这两个注解不只是影响序列化为JSON字符串的过程也影响JSON字符串反序列化为java对象的过程。举例如果JSON字符串包含了类中被JsonIgnore的属性值hobbies不会被反序列化赋值给java对象的成员变量hobbies。 欢迎关注我的博客里面有很多精品合集 本文转载注明出处必须带连接不能只转文字字母哥博客。觉得对您有帮助的话帮我点赞、分享您的支持是我不竭的创作动力 。另外笔者最近一段时间输出了如下的精品内容期待您的关注。 《手摸手教你学Spring Boot2.0》《Spring Security-JWT-OAuth2一本通》《实战前后端分离RBAC权限管理系统》《实战SpringCloud微服务从青铜到王者》《VUE深入浅出系列》