Java中將Excel轉換為JSON的兩種方法

banq發表於2024-03-25

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

在本教程中,我們將探討在 Java 中將 Excel 檔案轉換為 JSON 的兩種方法。

1、將 Apache POI 庫與 JSON 結合使用
Apache POI是一個流行的 Java 庫,用於讀寫Microsoft Office檔案格式(包括 Excel)。因此,我們可以使用POI讀取Excel檔案並將資料轉換為JSON格式。

在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>

讀取Excel資料並轉換為JSON
以下是示例 Java 程式碼,演示如何使用 Apache POI 讀取 Excel 檔案並將其資料轉換為 JSON:

JSONArray jsonArray = new JSONArray();
public String expectedJson = "[[\&#34C1\&#34,\&#34C2\&#34,\&#34C3\&#34,\&#34C4\&#34,\&#34C5\&#34]," +
  "[\&#341.0\&#34,\&#342.0\&#34,\&#343.0\&#34,\&#344.0\&#34,\&#345.0\&#34]," +
  "[\&#341.0\&#34,\&#342.0\&#34,\&#343.0\&#34,\&#344.0\&#34,\&#345.0\&#34]," +
  "[\&#341.0\&#34,\&#342.0\&#34,\&#343.0\&#34,\&#344.0\&#34,\&#345.0\&#34]," +
  "[\&#341.0\&#34,\&#342.0\&#34,\&#343.0\&#34,\&#344.0\&#34,\&#345.0\&#34]]";
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物件中,顯式利用.xlsx檔案的XSSFWorkbook實現。有了工作簿變數,就可以透過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)檢索Excel工作表的headerRow ,並使用headerRow.cellIterator()方法迭代標題行中的每個單元格。對於每個cell ,我們使用cell.toString()方法將其內容提取為字串,並將其儲存在jsonArray列表中。此過程可確保我們準確捕獲所有標頭值。

隨後,我們將使用 for 迴圈遍歷 Excel 工作表的每一行(不包括標題行):

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)檢索每一行。此外,我們迭代當前行中的每個單元格並將其內容新增到rowData中。然後使用jsonArray.put()將該列表(表示 Excel 檔案中的行)附加到JSONArray。

assertEquals(expectedJson, jsonArray.toString());
最後,我們使用assertEquals()斷言它與預期的JSON字串相等。

2、將 Apache POI 庫與 Jackson 一起使用
Jackson是一個流行的用於 JSON 處理的 Java 庫。它提供了強大的資料繫結功能,用於將 Java 物件轉換為 JSON,反之亦然。

將以下依賴項新增到pom.xml中:

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

讀取Excel資料並轉換為JSON
這裡的轉換過程有所不同,因為它側重於在序列化為 JSON 之前將 Excel 資料構建為 Java 物件。 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 工作表的每一行,將單元格值轉換為字串並將它們儲存在資料列表中。收集完所有資料後,我們利用 Jackson 的ObjectMapper使用writeValueAsString()方法將結構化列表轉換為 JSON 字串。

Jackson 的優勢在於其強大的資料繫結功能,使其成為處理複雜物件結構和提供高階別抽象的理想選擇。

結論
在本文中,我們討論了在 Java 中將 Excel 檔案轉換為 JSON 格式的兩種方法:使用 Apache POI 讀取和處理 Excel 資料,然後使用JSON和 Jackson 庫將其轉換為 JSON。

這兩個庫都提供了讀取 Excel 檔案和操作其資料的便捷方法,使我們能夠將 Excel 資料無縫轉換為 JSON 物件,以便在 Java 應用程式中進一步處理。
 

相關文章