1. 引言
將 Excel 數據轉換為 JSON 格式在許多 Java 應用程序中都很常見,尤其是在不同系統之間的數據交換時。
在本教程中,我們將探討兩種將 Excel 文件轉換為 JSON 的方法,在 Java 中實現。
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();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,並將 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) 從 Excel 表格中檢索 headerRow,並使用 headerRow.cellIterator() 方法遍歷 header row 中的每個 cell。對於每個 cell,我們使用 cell.toString() 方法提取其內容並將其存儲在 jsonArray 列表中。 這樣可以確保我們準確地捕獲所有 header 值。
接下來,我們將使用 for 循環遍歷 Excel 表格中的每一行(不包括 header row):
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 中。 這個列表,代表了 Excel 文件中的行,然後使用 jsonArray.put() 將其追加到 JSONArray 中。
assertEquals(expectedJson, jsonArray.toString());<p>最後,我們使用 assertEquals() 方法斷言其與預期 JSON 字符串的相等性。</p>
3. 使用 Apache POI 庫與 Jackson 庫集成
Jackson 是一個流行的 Java 庫,用於 JSON 處理。它提供強大的數據綁定功能,用於將 Java 對象轉換為 JSON,反之亦然。
3.1. 添加 Jackson 依賴
首先,我們在 <em >pom.xml</em> 中添加以下依賴:依賴。
<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 方法,利用 writeValueAsString() 方法將結構化列表轉換為 JSON 字符串。
Jackson 的優勢在於其強大的數據綁定能力,使其非常適合處理複雜的對象結構,並提供高層次的抽象。
4. 結論
在本文中,我們探討了兩種將 Excel 文件轉換為 JSON 格式的方法,這些方法均在 Java 中實現:使用 Apache POI 讀取和處理 Excel 數據,然後使用 JSON 和 Jackson 庫將其轉換為 JSON 格式。
這兩個庫都提供了方便的方法來讀取 Excel 文件並操作其數據,從而使我們能夠無縫地將 Excel 數據轉換為 JSON 對象,以便在我們的 Java 應用程序中進行進一步處理。