Jackson用法详解
发布日期:2021-05-14 17:36:06 浏览次数:20 分类:精选文章

本文共 3271 字,大约阅读时间需要 10 分钟。

Jackson解析工具简介与使用指南

一、Jackson简介

Jackson 是当前流行的用于 JSON 序列化和反序列化的开源 Java 框架。自 2017 年 8 月起,由 Original Jackson 开发团队维护,版本号从 1.x 跳转至 2.x。该框架速度快、内存占用低,成为 Spring MVC 的默认 JSON 解析工具。

核心模块说明

Jackson 核心包含三个主要模块:

  • jackson-core

    提供最低层的解析和生成逻辑,包括 JsonParserJsonGenerator

  • jackson-annotations

    提供标准注解功能,用于自定义 JSON 解析和序列化规则。

  • jackson-databind

    提供基于对象绑定的反序列化和序列化功能,支持对象模型(ObjectMapper)和树模型(JsonNode)。

  • 其余功能扩展在其他相关模块中支持。

    下载安装

    使用 Maven 的项目示例:

    com.fasterxml.jackson.core
    jackson-core
    2.9.6
    com.fasterxml.jackson.core
    jackson-databind
    2.9.6

    安装完成后,通过 ObjectMapper 类实现 JSON 解析和生成功能。

    二、ObjectMapper 使用说明

    1. 从 JSON 解析 Java 对象

    示例代码

    ObjectMapper objectMapper = new ObjectMapper();
    // 从文件读取
    String carJson = "{ \"brand\" : \"Mercedes\", \"doors\" : 5 }";
    Car car = objectMapper.readValue(new File("data/car.json"), Car.class);
    // 或通过输入流读取
    InputStream inputStream = new FileInputStream("data/car.json");
    car = objectMapper.readValue(inputStream, Car.class);

    直接使用

    默认行为:将 JSON 字段映射到 Java 对象属性,默认忽略未知字段。

    注意:若需要允许未知字段保留可通过 configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) 设置。

    2. Java 对象序列化为 JSON

    示例代码

    ObjectMapper objectMapper = new ObjectMapper();
    Car car = new Car();
    car.setBrand("BMW");
    car.setDoors(4);
    // 生成 JSON 至文件输出流
    objectMapper.writeValue(new FileOutputStream("data/output.json"), car);
    // 或生成 JSON 字符串
    String jsonStr = objectMapper.writeValueAsString(car);

    注意事项

    • 自定义序列化:可以实现自定义序列化器,再在 ObjectMapper 注册使用。
    • 日期处理:默认序列化 Date 为 timestamp 毫秒数,可配置使用格式化字符串。

    3. Jackson 树模型

    逐级解析与构建

    通过 JsonNode 类型实现灵活的 JSON 树操作:

    // 从 JSON 解析为树模型
    JsonNode rootNode = objectMapper.readTree(jsonStr);
    // 树模型操作示例
    JsonNode brandNode = rootNode.get("brand");
    String brand = brandNode.asText();
    System.out.println("Brand: " + brand);
    JsonNode arrayNode = rootNode.get("owners");
    JsonNode firstOwner = arrayNode.get(0);
    System.out.println("First owner: " + firstOwner.asText());

    4.日期转换

    JSON 到 Date

    默认将 JSON 中的日期字段解析为 long 类型,具体时间以 moment epoxy Unix 时间计算。

    // 创建 JSON 例如
    String dateJson = "{\"time\": 1234567890}";
    // 反序列化为 Date
    Date date = objectMapper.readValue(dateJson, Date.class);
    System.out.println("Time: " + date.getTime());

    ####自定义日期格式

    通过设置 DateFormat 并传递给 ObjectMapper

    objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"));
    // 生成自定义日期字符串
    String formattedDate = objectMapper.writeValueAsString(date);

    三、注解应用

    1. 常用注解分类

    注解 作用
    @JsonProperty 定义字段与 JSON 名称映射关系,支持 alias
    @JsonFormat 定义字段的格式输出
    @JsonPropertyOrder 定义属性在 JSON 中的排序顺序
    @JsonCreator 指定构造函数用于反序列化
    @JacksonInject 注入值到对象属性

    2. 示例应用

    @JsonCreator

    用于定制反序列化行为:

    public class Person {
    public Person(@JsonProperty("id") Long id, @JsonProperty("name") String name) {
    this.id = id;
    this.name = name;
    }
    private final Long id;
    private final String name;
    }

    @JsonRawValue

    用于保留原始 JSON 格式:

    public class Amount {
    private Long value;
    @JsonRawValue
    public Long getValue() {
    return value;
    }
    }

    四、反编译工具

    通过 Jackson 模型,实现结构化数据的解析与转换,适用于复杂格式数据处理。

    核心工具

    工具 作用
    JsonParser JSON 解析器
    JsonGenerator JSON 生命器
    ObjectMapper JSON 对象映射

    总结:

    Jackson 为 Spring MVC 提供便捷的 JSON 数据处理能力,适合开发高效的 JSON服务。通过合理配置和注解,用户可以定制 JSON 处理流程,提升开发效率。

    上一篇:SpringBoot 2.0 开发案例之参数传递的正确姿势
    下一篇:设计模式—— 十三 :原型模式

    发表评论

    最新留言

    路过按个爪印,很不错,赞一个!
    [***.219.124.196]2025年04月24日 03时19分43秒