如何在 Java 中將 Excel 轉換為 JSON
一、簡介
將 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 POI和JSON依賴項加入我們的專案中。如果我們使用 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
以下是範例 Java 程式碼,示範如何使用 Apache POI 讀取 Excel 檔案並將其資料轉換為 JSON:
JSONArray jsonArray = new JSONArray();
將 Excel 轉換為 JSON 首先初始化一個InputStream
,該 InputStream 將filePath
作為參數來讀取 Excel 檔案。
然後,我們將此檔案載入到Workbook
物件中,明確利用.xlsx
檔案的XSSFWorkbook
實作。有了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)
來擷取Excel工作表的headerRow
,並使用headerRow.cellIterator()
方法迭代標題行中的每個cell
格。對於每個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)
檢索每一行。此外,我們迭代目前row
中的每個cell
格並將其內容新增至rowData
。然後使用jsonArray.put()
將該清單(表示 Excel 檔案中的行)附加到JSONArray
。
assertEquals(expectedJson, jsonArray.toString());
最後,我們使用assertEquals()斷言它與預期的JSON字串相等。
3. 將 Apache POI 庫與 Jackson 一起使用
Jackson 是一個流行的用於 JSON 處理的 Java 庫。它提供了強大的資料綁定功能,用於將 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
這裡的轉換過程有所不同,因為它專注於在序列化為 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 工作表的每一row
,將cell
格值轉換為字串並將它們儲存在data
列表中。收集完所有資料後,我們利用 Jackson 的ObjectMapper
使用writeValueAsString()
方法將結構化清單轉換為 JSON 字串。
Jackson 的優勢在於其強大的資料綁定功能,使其成為處理複雜物件結構和提供高層次抽象的理想選擇。
4。結論
在本文中,我們討論了在 Java 中將 Excel 檔案轉換為 JSON 格式的兩種方法:使用 Apache POI 讀取和處理 Excel 數據,然後使用JSON
和 Jackson 庫將其轉換為 JSON。
這兩個函式庫都提供了讀取 Excel 檔案和操作其資料的便捷方法,使我們能夠將 Excel 資料無縫轉換為 JSON 對象,以便在 Java 應用程式中進一步處理。
與往常一樣,本文的完整程式碼範例可以在 GitHub 上找到。