如何在Java中將Excel轉換為JSON

Jackson
Remote
2
07:15 PM · Nov 30 ,2025

1. 簡介

將 Excel 數據轉換為 JSON 格式在許多 Java 應用程序中都很常見,尤其是在處理不同系統之間的數據交換時。

在本教程中,我們將探索兩種在 Java 中將 Excel 文件轉換為 JSON 的方法。

2. 使用 Apache POI 庫與 JSON

Apache POI 是一個流行的 Java 庫,用於讀取和寫入 Microsoft Office 文件格式,包括 Excel。因此,我們可以使用 POI 讀取 Excel 文件並將數據轉換為 JSON 格式。

2.1. 添加 Apache POI 和 JSON 依賴項

首先,我們需要將 Apache POIJSON 依賴項添加到我們的項目中。如果我們在 Maven 中使用,則在我們的 pom.xml 中包含以下依賴項:


<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.5</version>
</dependency>

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20230227</version>
</dependency>

2.2. 讀取 Excel 數據並轉換為 JSON

以下是使用 Apache POI 讀取 Excel 文件並將其數據轉換為 JSON 的一個示例 Java 代碼:


JSONArray jsonArray = new JSONArray();

public String expectedJson = "[[\"C1\",\"C2\",\"C3\",\"C4\",\"C5\"]," +
  "[\"1.0\",\"2.0\",\"3.0\",\"4.0\",\"5.0\"]," +
  "[\"1.0\",\"2.0\",\"3.0\",\"4.0\",\"5.0\"]," +
  "[\"1.0\",\"2.0\",\"3.0\",\"4.0\",\"5.0\"]," +
  "[\"1.0\",\"2.0\",\"3.0\",\"4.0\",\"5.0\"]]";
private Workbook workbook;
private Sheet sheet;
private InputStream inputStream;

public ExcelToJsonUnitTest() throws IOException {
    inputStream = new FileInputStream(filePath);
    workbook = new XSSFWorkbook(inputStream);
    sheet = workbook.getSheetAt(0);
}

將 Excel 轉換為 JSON 開始於初始化一個 InputStream,該 InputStream 接受 filePath 作為參數以讀取 Excel 文件。

然後,我們使用 Workbook 對象加載該文件,明確地利用 XSSFWorkbook 實現用於 .xlsx 文件。 藉助 workbook 變量,可以按 getSheetAt(0) 方法訪問所需的表單,假定它是第一個表單。

現在,讓我們使用 Apache POI 的功能處理 Excel 數據,通過迭代表單中的每一行和單元格:


Row headerRow = sheet.getRow(0);
List<String> headers = new ArrayList<>();
for (Cell cell : headerRow) {
    headers.add(cell.toString());
}
jsonArray.put(headers);

最初,我們使用 sheet.getRow(0) 檢索 headerRow,並迭代 headerRow 中的每個 cell,使用 headerRow.cellIterator() 方法。 對於每個 cell,我們使用 cell.toString() 方法提取其內容,並將其存儲在 jsonArray 列表中。 這樣可以準確地捕獲所有標題值。

隨後,我們將迭代 Excel 表單中的每一行(不包括標題行)使用一個 for 循環:


for (int i = 1; i <= sheet.getLastRowNum(); i++) {
    Row row = sheet.getRow(i);
    List<String> rowData = new ArrayList<>();
    for (Cell cell : row) {
        rowData.add(cell.toString());
    }
    jsonArray.put(rowData);
}

在這裏,我們使用 sheet.getRow(i) 檢索每一行。 此外,我們迭代當前 row 中的每個 cell,並將其內容添加到 rowData 中。 此列表,表示 Excel 文件中的行,已使用 jsonArray.put() 附加到 JSONArray


assertEquals(expectedJson, jsonArray.toString());

最後,我們使用 assertEquals() 驗證其與預期的 JSON 字符串的相等性。

3. 使用 Apache POI 庫與 Jackson

Jackson 是一個流行的 Java 庫,用於 JSON 處理。它提供強大的數據綁定功能,用於將 Java 對象轉換為 JSON 以及反之。

3.1. 添加 Jackson 依賴

我們首先添加以下 依賴 到我們的 pom.xml 中:


<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.17.0</version>
</dependency>

3.2. 讀取 Excel 數據並轉換為 JSON

轉換過程在這裏有所不同,因為它側重於將 Excel 數據結構化為 Java 對象,然後再將其序列化為 JSON。 Jackson 的 ObjectMapper 類在此處起着關鍵作用,因為它能夠輕鬆地處理 Java 對象到 JSON 字符串的轉換:


@Test
public void givenExcelFile_whenUsingJacksonConversion_thenConvertToJson() throws JsonProcessingException {
    List<List<String>> data = new ArrayList<>();

    Row headerRow = sheet.getRow(0);
    List<String> headers = new ArrayList<>();
    for (Cell cell : headerRow) {
        headers.add(cell.toString());
    }
    data.add(headers);

    for (int i = 1; i <= sheet.getLastRowNum(); i++) {
        Row row = sheet.getRow(i);
        List<String> rowData = new ArrayList<>();
        for (Cell cell : row) {
            rowData.add(cell.toString());
        }
        data.add(rowData);
    }

    ObjectMapper objectMapper = new ObjectMapper();
    String json = objectMapper.writeValueAsString(data);

    assertEquals(expectedJson, json);
}

在這裏,我們初始化一個名為 data 的空列表,用於以結構化的方式存儲 Excel 數據。然後,它遍歷 Excel 表中的每個 ,將 單元格 的值轉換為字符串,並將它們存儲在 data 列表中。在收集所有數據之後,我們使用 Jackson 的 ObjectMapper 將結構化列表轉換為 JSON 字符串,使用 writeValueAsString() 方法。

Jackson 的優勢在於其強大的數據綁定能力,使其成為處理複雜對象結構和提供高層次抽象的理想選擇。

4. 結論

在本文中,我們討論了兩種將 Excel 文件轉換為 JSON 格式的方法,即使用 Java 讀取和處理 Excel 數據,然後使用 JSON 和 Jackson 庫將其轉換為 JSON。

這兩個庫都提供了方便的方法來讀取 Excel 文件並操作其數據,從而使我們能夠無縫地將 Excel 數據轉換為 JSON 對象,以便在我們的 Java 應用程序中進行進一步處理。

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

發佈 評論

Some HTML is okay.