{一起看DZone}JSON-B 是個什么鬼

大家好,我是William李梓峰,歡迎一起看DZone。

今天翻翻 DZone Java 首頁的時候,偶然看到一則消息:

Java EE 8: June 2017 Recap
https://dzone.com/articles/java-ee-8-june-2017-recap

文章里頭大概講了 Java EE 8 在 Java EE Expert Group 評審的進度型型。
偶然發(fā)現(xiàn)了 JSON-B (JSR 367)這個新規(guī)范特性,這意味著以后用最新版的 Tomcat 就可以直接用了全蝶,不用自己 depend闹蒜。

JSON-B 是個什么鬼

按照慣例,先來個官網(wǎng):

JSON-B 官網(wǎng)
http://json-b.net/index.html

對于我這個兩年 Java 工作經(jīng)驗的初級工程師來說抑淫,看到新東西绷落,不用跳 Getting Started ,而是直接從 User Guide 入手了解始苇。

再來個User Guide:

JSON-B User Guide
http://json-b.net/users-guide.html

JSON-B 就是跟 Gson 一樣砌烁。提供序列化和反序列化 Java 類 到 JSON 的特性。

JSON-B 的依賴

    <!-- JSON-P API -->
    <dependency>
        <groupId>javax.json</groupId>
        <artifactId>javax.json-api</artifactId>
        <version>1.1</version>
    </dependency>

    <!-- JSON-P RI -->
    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>javax.json</artifactId>
        <version>1.1</version>
        <scope>runtime</scope>
    </dependency>

    <!-- JSON-B API -->
    <dependency>
        <groupId>javax.json.bind</groupId>
        <artifactId>javax.json.bind-api</artifactId>
        <version>1.0.0-RC2</version>
    </dependency>

    <!-- Yasson (JSON-B RI) -->
    <dependency>
        <groupId>org.eclipse</groupId>
        <artifactId>yasson</artifactId>
        <version>1.0.0-RC1</version>
        <scope>runtime</scope>
    </dependency>

JSON Binding API

這種是最簡單的玩法:

Jsonb jsonb = JsonbBuilder.create();

官方給了這么簡單的例子:

// 不用 getter setter催式,逆天了
public class Dog {
    public String name;
    public int age;
    public boolean bitable;
}

// JSON-B 作者應(yīng)該也是寫 JavaScript 的
// Create a dog instance
Dog dog = new Dog();
dog.name = "Falco";
dog.age = 4;
dog.bitable = false;

// Create Jsonb and serialize 序列化
Jsonb jsonb = JsonbBuilder.create();
String result = jsonb.toJson(dog);    // 跟 gson 一樣簡潔

// Deserialize back 反序列化
dog = jsonb.fromJson("{name:\"Falco\",age:4,bitable:false}", Dog.class);

有人會立馬問個泛型機制的老大難問題函喉,
像 List<XXX> 這種怎么反序列化?
難道又要自己寫 Converter 荣月?
JSON-B 話你知:No No No

// List of dogs
List<Dog> dogs = new ArrayList<>();
dogs.add(falco);
dogs.add(cassidy);

// Create Jsonb and serialize
Jsonb jsonb = JsonbBuilder.create();
String result = jsonb.toJson(dogs);

// Deserialize back
dogs = jsonb.fromJson(
    result, 
    new ArrayList<Dog>(){}
        .getClass()
        .getGenericSuperclass() 
);

沒錯就是用 getGenricSuperclass() 來做序列化管呵,本質(zhì)上還是直接 Dog.class 。

JSON-B 的配置類

JSON-B 還有個專門的配置類哺窄,讓JSON的輸入輸出更加靈活多變捐下,例如格式化輸出等等。

// Create custom configuration
JsonbConfig config = new JsonbConfig();

// Create Jsonb with custom configuration
Jsonb jsonb = JsonbBuilder.create(config);

格式化輸出的例子:

// Create custom configuration with formatted output
JsonbConfig config = new JsonbConfig()
    .withFormatting(true);

// Create Jsonb with custom configuration
Jsonb jsonb = JsonbBuilder.create(config);

// Use it!
String result = jsonb.toJson(pojo);

哎呀萌业,還有好多很好玩的格式化輸出特性啊坷襟,這里沒位置寫了,我再寫多一個超級棒的生年,@JsonDateFormat 和 @JsonNumberFormat:

public class Person {
    public String name;

    // 膜拜吧
    @JsonbDateFormat("dd.MM.yyyy")
    private Date birthDate;

    // 顫抖吧
    @JsonbNumberFormat(“#0.00")
    public BigDecimal salary;
}

如果 SpringBoot 能夠直接支持 JSON-B 就好了婴程,恩, Spring Framework 5 好像真的直接支持哦晶框。(這里求考證)

今天就寫這么多排抬,更多關(guān)于 JSON-B 的資料請看上面貼出的官網(wǎng)啊懂从。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末授段,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子番甩,更是在濱河造成了極大的恐慌侵贵,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缘薛,死亡現(xiàn)場離奇詭異窍育,居然都是意外死亡卡睦,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門漱抓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來表锻,“玉大人,你說我怎么就攤上這事乞娄∷惭罚” “怎么了?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵仪或,是天一觀的道長确镊。 經(jīng)常有香客問我,道長范删,這世上最難降的妖魔是什么蕾域? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮到旦,結(jié)果婚禮上旨巷,老公的妹妹穿的比我還像新娘。我一直安慰自己厢绝,他們只是感情好契沫,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著昔汉,像睡著了一般懈万。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上靶病,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天会通,我揣著相機與錄音,去河邊找鬼娄周。 笑死涕侈,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的煤辨。 我是一名探鬼主播裳涛,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼众辨!你這毒婦竟也來了端三?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤鹃彻,失蹤者是張志新(化名)和其女友劉穎郊闯,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡团赁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年育拨,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欢摄。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡熬丧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出怀挠,到底是詐尸還是另有隱情锹引,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布唆香,位于F島的核電站嫌变,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏躬它。R本人自食惡果不足惜腾啥,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望冯吓。 院中可真熱鬧倘待,春花似錦、人聲如沸组贺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽失尖。三九已至啊奄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掀潮,已是汗流浹背菇夸。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留仪吧,地道東北人庄新。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像薯鼠,于是被迫代替她去往敵國和親择诈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容