將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 = "[[\"C1\",\"C2\",\"C3\",\"C4\",\"C5\"]," + "[\ŕ.0\",\Ŗ.0\",\ŗ.0\",\Ř.0\",\ř.0\"]," + "[\ŕ.0\",\Ŗ.0\",\ŗ.0\",\Ř.0\",\ř.0\"]," + "[\ŕ.0\",\Ŗ.0\",\ŗ.0\",\Ř.0\",\ř.0\"]," + "[\ŕ.0\",\Ŗ.0\",\ŗ.0\",\Ř.0\",\ř.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物件中,顯式利用.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 應用程式中進一步處理。