如何使用jakarta.json进行json序列化和反序列化

 更新时间:2024年07月04日 09:17:23   作者:加瓦儿  
java里,json框架何其多,常见的有jackson、fastjson、gson等,本文重点介绍如何使用jakarta.json进行json序列化和反序列化,需要的朋友可以参考下,

引言

java里,json框架何其多,常见的有jackson、fastjson、gson等。各自的api互不相通,与代码耦合度高,切换代码非常高。如果使用json的api为统一的入口,各家再进行实现,代码与实现类不耦合,像slf4j一样,切换log框架(log4j/logback等)也不用改代码,代码只对api依赖,不对实现依赖,那就很好了。
jakarta.json项目就是为了解决这个问题的。自从javax改名jakarta,并全部给eclipse基金会运营,jakarta.json作为Jakarta EE子项目之一也得到了支持。

引入依赖

        <dependency>
            <groupId>jakarta.json.bind</groupId>
            <artifactId>jakarta.json.bind-api</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse</groupId>
            <artifactId>yasson</artifactId>
            <version>3.0.3</version>
        </dependency>

jakarta.json.bind-api是jsonb的接口包,里面只有对象定义、接口定义等,没有代码实现。yasson则对jsonb规范进行了完整实现。

将一个对象序列化为json字符串

    @Test
    void serialize() {
        User user = new User("John", 12, "This is a test", LocalDate.parse("2020-01-01"));
        String json = JsonbBuilder.create().toJson(user);
        System.out.println(json);
    }

将一个对象序列化为json字符串(格式化)

    @Test
    void prettySerialize() {
        User user = new User("John", 12, "This is a test", LocalDate.parse("2020-01-01"));
        String json = JsonbBuilder.create(new JsonbConfig().withFormatting(true)).toJson(user);
        System.out.println(json);
    }

将一个json字符串反序列化为一个对象

    public record User(String name, int age, String remark, LocalDate birthDate) { }
    @Test
    void deserialize() {
        String json = """
                {
                    "name": "John",
                    "age": 12,
                    "remark": "This is a test",
                    "birthDate": "2020-01-01"
                }
                """;
        User user = JsonbBuilder.create().fromJson(json, User.class);
        System.out.println("user = " + user);
    }

到此这篇关于使用jakarta.json进行json序列化和反序列化的文章就介绍到这了,更多相关json序列化和反序列化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java中object类实例分析

    java中object类实例分析

    这篇文章主要介绍了java中object类实例分析,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • 解决mybatisplus MetaObjectHandler 失效的问题

    解决mybatisplus MetaObjectHandler 失效的问题

    本文主要介绍了解决mybatisplus MetaObjectHandler 失效的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 关于Java三大特性之多态的总结

    关于Java三大特性之多态的总结

    这篇文章主要介绍了关于Java三大特性之多态的总结,内容详细,涉及多态的定义,存在条件,好处,分类及实现方式等相关内容,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • response.setHeader各种用法详解

    response.setHeader各种用法详解

    本文主要介绍了response.setHeader各种用法。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-03-03
  • java关于并发模型中的两种锁知识点详解

    java关于并发模型中的两种锁知识点详解

    在本篇文章了小编给大家整理的是一篇关于java关于并发模型中的两种锁知识点详解内容,有兴趣的朋友们可以学习下。
    2021-04-04
  • SpringBoot使用Redis Stream实现轻量消息队列的示例代码

    SpringBoot使用Redis Stream实现轻量消息队列的示例代码

    Redis Stream 是 Redis 5.0 引入的一种数据结构,用于处理日志类型的数据,它提供了高效、可靠的方式来处理和存储时间序列数据,如事件、消息等,本文介绍了SpringBoot使用Redis Stream实现轻量消息队列,需要的朋友可以参考下
    2024-08-08
  • Java中的Graphics2D类基本使用教程

    Java中的Graphics2D类基本使用教程

    这篇文章主要介绍了Java中的Graphics2D类基本使用教程,Graphics2D类较之Graphics类中的功能更加专业,需要的朋友可以参考下
    2015-10-10
  • java 求解二维数组列最小值

    java 求解二维数组列最小值

    这篇文章主要介绍了java 求解二维数组列最小值的相关资料,需要的朋友可以参考下
    2017-05-05
  • 关于nacos无法正常下线问题记录

    关于nacos无法正常下线问题记录

    这篇文章主要介绍了关于nacos无法正常下线问题记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Java使用反射获取字段属性

    Java使用反射获取字段属性

    这篇文章主要为大家详细介绍了Java如何利用反射实现获取字段属性值,文中的示例代码讲解详细,具有很好的参考价值,希望对大家有所帮助
    2023-06-06

最新评论