美文网首页Java开发那些事Java 杂谈Android知识
{一起看DZone}JSON-B 是个什么鬼

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

作者: William李梓峰 | 来源:发表于2017-07-13 13:20 被阅读0次

大家好,我是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 评审的进度。
偶然发现了 JSON-B (JSR 367)这个新规范特性,这意味着以后用最新版的 Tomcat 就可以直接用了,不用自己 depend。

JSON-B 是个什么鬼

按照惯例,先来个官网:

JSON-B 官网
http://json-b.net/index.html

对于我这个两年 Java 工作经验的初级工程师来说,看到新东西,不用跳 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 作者应该也是写 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() 来做序列化,本质上还是直接 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 好像真的直接支持哦。(这里求考证)

今天就写这么多,更多关于 JSON-B 的资料请看上面贴出的官网啊。

相关文章

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

    大家好,我是William李梓峰,欢迎一起看DZone。 今天翻翻 DZone Java 首页的时候,偶然看到一则...

  • 6. JSON

    SpringBoot 内嵌了 3 个 JSON 类库 Gson Jackson JSON-B Jackson 是默...

  • {一起看DZone}Optional 其实很渣渣

    大家好,我是William。 前几天我在DZone上看到了一篇文章《Optional Anti-Patterns》...

  • this是个什么鬼

    JS中this关键字很常见,但是它似乎变幻莫测,让人抓狂。这篇文章就来揭示其中的奥秘。 借助阮一峰老师的话:它代表...

  • 技术网站英文

    https://dzone.com/[https://dzone.com/] https://www.javaco...

  • DataOps(数据运维)指南 - 数据管理的新时代

    【注】本文译自:A Guide to DataOps - DZone Big Data[https://dzone...

  • [转载]什么是CICD

    原文来自:https://dzone.com/articles/what-is-cicd、什么是CICD 随着De...

  • Java 异常机制

    【注】本文译自:Java Exceptions - DZone Java[https://dzone.com/ar...

  • 诗人

    诗人是个什么鬼 你写的看的叹息的 都三言两语被总结 不是什么鬼 是遇见了鬼 也写着看着叹息着 说的对不对 都相信了眼睛

  • GI是个什么鬼?

    吃个饭为什么这么麻烦?GI是个什么鬼? 我尽量简单讲,实在讲不明白,大家自己去网上找,看有没有写得更明白的。 GI...

网友评论

    本文标题:{一起看DZone}JSON-B 是个什么鬼

    本文链接:https://www.haomeiwen.com/subject/sgjwhxtx.html