知識庫 / JSON / Jackson RSS 訂閱

使用 Jackson 處理 YAML

Data,Jackson
HongKong
10
09:52 PM · Dec 05 ,2025

1. 簡介

在本簡短教程中,我們將學習如何使用 Jackson 讀取和寫入 YAML 文件。

在回顧示例結構之後,我們將使用 ObjectMapper 將 YAML 文件讀取到 Java 對象中,並也將 Java 對象寫入到文件中。

2. 依賴項

讓我們添加 Jackson YAML 數據格式的依賴項:

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-yaml</artifactId>
    <version>2.13.0</version>
</dependency>

我們始終可以從 Maven Central 找到該依賴項的最新版本。

我們的 Java 對象使用 LocalDate,因此我們還需要添加對 JSR-310 類型的依賴:

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.13.0</version>
</dependency>

再次,我們可以在 Maven Central 上查找其最新版本。

3. 數據和對象結構

有了所有依賴項已配置完畢,我們現在將轉向我們的輸入文件和我們將使用的 Java 類。

首先,讓我們查看我們將讀取的文件:

orderNo: A001
date: 2019-04-17
customerName: Customer, Joe
orderLines:
    - item: No. 9 Sprockets
      quantity: 12
      unitPrice: 1.23
    - item: Widget (10mm)
      quantity: 4
      unitPrice: 3.45

然後,讓我們定義 Order 類:

public class Order {
    private String orderNo;
    private LocalDate date;
    private String customerName;
    private List<OrderLine> orderLines;

    // Constructors, Getters, Setters and toString
}

最後,讓我們創建我們的 OrderLine 類:

public class OrderLine {
    private String item;
    private int quantity;
    private BigDecimal unitPrice;

    // Constructors, Getters, Setters and toString
}

4. 閲讀 YAML

我們將使用 Jackson 的 ObjectMapper 將我們的 YAML 文件讀取到 Order 對象中,因此現在讓我們設置它:

mapper = new ObjectMapper(new YAMLFactory());

我們需要使用 findAndRegisterModules方法,以便 Jackson 正確處理我們的 Date

mapper.findAndRegisterModules();

一旦我們配置好 ObjectMapper我們只需使用 readValue

Order order = mapper.readValue(new File("src/main/resources/orderInput.yaml"), Order.class);

我們將會發現我們的 Order 對象是從文件中填充的,包括 OrderLine 的列表。

5. 編寫 YAML

我們還將使用 ObjectMapper訂單 寫入文件。但是首先,讓我們為其添加一些配置:

mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

添加那一行會告訴 Jackson 將我們的日期以 String 格式寫入,而不是單獨的數字部分。

默認情況下,我們的文件將以三個連字符開頭。這對於 YAML 格式來説完全有效,但 我們可以通過在 YAMLFactory 中禁用該功能來關閉它

mapper = new ObjectMapper(new YAMLFactory().disable(Feature.WRITE_DOC_START_MARKER));

有了這些額外配置就緒,我們現在來創建一個 訂單

List<OrderLine> lines = new ArrayList<>();
lines.add(new OrderLine("Copper Wire (200ft)", 1, 
  new BigDecimal(50.67).setScale(2, RoundingMode.HALF_UP)));
lines.add(new OrderLine("Washers (1/4\")", 24, 
  new BigDecimal(.15).setScale(2, RoundingMode.HALF_UP)));
Order order = new Order(
  "B-9910", 
  LocalDate.parse("2019-04-18", DateTimeFormatter.ISO_DATE),
  "Customer, Jane", 
  lines);

讓我們使用 <em valueWrite 來編寫我們的訂單:

mapper.writeValue(new File("src/main/resources/orderOutput.yaml"), order);

當我們查看 <em orderOutput.yaml,它應該類似於:

orderNo: "B-9910"
date: "2019-04-18"
customerName: "Customer, Jane"
orderLines:
- item: "Copper Wire (200ft)"
  quantity: 1
  unitPrice: 50.67
- item: "Washers (1/4\")"
  quantity: 24
  unitPrice: 0.15

6. 結論

在本快速教程中,我們學習瞭如何使用 Jackson 庫將 YAML 讀寫到和從文件中。我們還探討了一些配置項,以幫助我們使數據呈現出我們想要的方式。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.