Jackson是Spring Boot默認(rèn)的JSON數(shù)據(jù)處理框架,但是其并不依賴于任何的Spring 庫。有的小伙伴以為Jackson只能在Spring框架內(nèi)使用枝秤,其實(shí)不是的零蓉,沒有這種限制。它提供了很多的JSON數(shù)據(jù)處理方法大刊、注解为迈,也包括流式API、樹模型缺菌、數(shù)據(jù)綁定葫辐,以及復(fù)雜數(shù)據(jù)類型轉(zhuǎn)換等功能。它雖然簡單易用伴郁,但絕對不是小玩具耿战,更多的內(nèi)容我會(huì)寫成一個(gè)系列,5-10篇文章焊傅,請您繼續(xù)關(guān)注我剂陡。
-
《序列化與反序列化核心用法-JSON框架Jackson精解第一篇》
- 一狈涮、基礎(chǔ)數(shù)據(jù)準(zhǔn)備
- 二、序列化方法
- 三鸭栖、反序列化方法
- 四歌馍、字段重命名
@JsonProperty
- 五、忽略null字段的序列化
@JsonInclude
- 六晕鹊、忽略指定的字段
-
《特殊數(shù)據(jù)格式處理-JSON框架Jackson精解第2篇》
- 一松却、從URL讀取JSON數(shù)據(jù)
- 二、Unknow Properties 賦值失敗處理
- 三溅话、未賦值Java Bean序列化
- 四玻褪、日期格式化
大家在平時(shí)進(jìn)行JSON數(shù)據(jù)序列化過程中,經(jīng)常會(huì)有按照一定順序序列化屬性這樣的需求公荧。本文為大家介紹如何對JSON序列化的屬性進(jìn)行排序带射,可以自定義順序,也可以按照字母表順序排序循狰。
一窟社、@JsonPropertyOrder
屬性排序
通過JsonPropertyOrder注解指定java POJO中各個(gè)成員變量的屬性序列化順序。
@Data
@JsonPropertyOrder({"salary","name","age","hobbies","friends"})
public class PlayerStar {
private String name;
private Integer age;
private String[] hobbies; //業(yè)余愛好,數(shù)組
private List<String> friends; // 朋友
private Map<String, BigDecimal> salary; //年收入 Map
}
最終Java POJO對象序列化為如下的字符串绪钥,屬性是按照J(rèn)sonPropertyOrder注解定義的順序序列化的("salary","name","age","hobbies","friends")灿里。如果不使用JsonPropertyOrder指定順序,默認(rèn)是按照J(rèn)ava類成員變量的聲明順序進(jìn)行序列化程腹。
{
"salary" : {
"2000" : 10000000,
"2010" : 62000000,
"2020" : 112400000
},
"name" : "喬丹",
"age" : 45,
"hobbies" : [ "高爾夫球", "棒球" ],
"friends" : [ "kobe", "curry", "james" ]
}
可以使用下面的代碼將PlayerStar對象序列化為字符串
//getInstance是一個(gè)為PlayerStar各屬性賦值的初始化方法匣吊,可以參考本系列文章第一節(jié):基礎(chǔ)數(shù)據(jù)準(zhǔn)備
PlayerStar jordan = PlayerStar.getInstance();
//ObjectMapper作為Jackson的API工具類存在
ObjectMapper mapper = new ObjectMapper();
String jsonInString2 = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(jordan);
System.out.println(jsonInString2);
二、字母表順序排序
使用@JsonPropertyOrder(alphabetic = true)
定義Java類成員變量的序列化順序
@JsonPropertyOrder(alphabetic = true)
public class PlayerStar {
//成員變量定義和上文一致
}
在英語字母表中寸潦,age(a開頭) > friends(f開頭) ->hobbies(h開頭)色鸳,以此類推,所以最終JSON序列化結(jié)果如下:
{
"age" : 45,
"friends" : [ "kobe", "curry", "james" ],
"hobbies" : [ "高爾夫球", "棒球" ],
"name" : "喬丹",
"salary" : {
"2000" : 10000000,
"2010" : 62000000,
"2020" : 112400000
}
}
歡迎關(guān)注我的博客见转,里面有很多精品合集
- 本文轉(zhuǎn)載注明出處(必須帶連接命雀,不能只轉(zhuǎn)文字):字母哥博客。
覺得對您有幫助的話斩箫,幫我點(diǎn)贊吏砂、分享!您的支持是我不竭的創(chuàng)作動(dòng)力! 。另外轻要,筆者最近一段時(shí)間輸出了如下的精品內(nèi)容函似,期待您的關(guān)注。