Excel 转换为 JSON 的Java实现

在现代软件开发中,数据交换常常需要在不同格式之间进行转换。Excel 作为常用的数据表格格式,经常需要转换为 JSON 格式以便更好地在 web 应用或API 中传输。本文将介绍如何使用 Java 将 Excel 文件转换为 JSON,并提供相关的代码示例。

1. 准备工作

在进行代码实现之前,确保你已经在你的项目中加入了以下依赖项,用来处理 Excel 文件和 JSON 格式。我们将使用 Apache POI 库来读取 Excel 文件,使用 Jackson 或 Gson 库来生成 JSON 数据。

在 Maven 项目的 pom.xml 中添加如下依赖:

<dependencies>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.2.2</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.12.4</version>
    </dependency>
</dependencies>

2. 类图

为了方便理解程序结构,下面是转换过程中的主要类图:

classDiagram
    class ExcelToJsonConverter {
        +convert(File file) : String
    }
    class ExcelReader {
        +readExcel(File file) : List<Map<String, String>>
    }
    class JsonWriter {
        +writeJson(List<Map<String, String>> data) : String
    }

    ExcelToJsonConverter --> ExcelReader
    ExcelToJsonConverter --> JsonWriter

3. 实现步骤

3.1 ExcelReader 类

首先,我们创建一个 ExcelReader 类来读取 Excel 文件,并将每一行的数据存储在一个 Map 中。每一列的标题将作为 Map 的键,而每一行的单元格内容将作为值。

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.*;

public class ExcelReader {
    public List<Map<String, String>> readExcel(File file) throws IOException {
        List<Map<String, String>> dataList = new ArrayList<>();
        FileInputStream fis = new FileInputStream(file);
        Workbook workbook = new XSSFWorkbook(fis);
        Sheet sheet = workbook.getSheetAt(0);
        
        Row headerRow = sheet.getRow(0);
        int columnCount = headerRow.getPhysicalNumberOfCells();
        
        for (int i = 1; i <= sheet.getLastRowNum(); i++) {
            Row row = sheet.getRow(i);
            Map<String, String> dataMap = new HashMap<>();
            for (int j = 0; j < columnCount; j++) {
                Cell cell = row.getCell(j);
                dataMap.put(headerRow.getCell(j).getStringCellValue(), cell.toString());
            }
            dataList.add(dataMap);
        }
        
        workbook.close();
        fis.close();
        return dataList;
    }
}

3.2 JsonWriter 类

接下来,创建 JsonWriter 类,用于将 List<Map> 数据转换为 JSON 字符串。

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.List;
import java.util.Map;

public class JsonWriter {
    public String writeJson(List<Map<String, String>> data) throws JsonProcessingException {
        ObjectMapper objectMapper = new ObjectMapper();
        return objectMapper.writeValueAsString(data);
    }
}

3.3 ExcelToJsonConverter 类

最后,创建 ExcelToJsonConverter 类,该类将整合上述两个类,并完成从 Excel 到 JSON 的转换。

import java.io.File;
import java.io.IOException;

public class ExcelToJsonConverter {
    public String convert(File file) {
        ExcelReader reader = new ExcelReader();
        JsonWriter writer = new JsonWriter();

        try {
            List<Map<String, String>> data = reader.readExcel(file);
            return writer.writeJson(data);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}

4. 运行示例

假设你有一个名为 data.xlsx 的 Excel 文件,你可以使用以下代码调用转换方法:

import java.io.File;

public class Main {
    public static void main(String[] args) {
        ExcelToJsonConverter converter = new ExcelToJsonConverter();
        File excelFile = new File("data.xlsx");
        String jsonResult = converter.convert(excelFile);
        System.out.println(jsonResult);
    }
}

5. 旅行示例

在 Java 中实现 Excel 到 JSON 的转换就像一场旅行。准备好你的 Excel 文件,使用 ExcelReader 阅读数据,利用 JsonWriter 输出你的 JSON 数据,最后在 ExcelToJsonConverter 的指引下,顺利抵达转换的终点。

journey
    title Excel to JSON Conversion Journey
    section Prepare
      Prepare Excel file: 5: Me
    section Read Data
      Read data using ExcelReader: 5: ExcelReader
    section Convert to JSON
      Convert data using JsonWriter: 5: JsonWriter
    section Complete
      Return JSON result: 5: ExcelToJsonConverter

结尾

通过以上步骤,我们成功实现了将Excel文件转换为JSON格式的功能。此实现不仅展示了Java在数据处理方面的强大能力,同时使用了流行的开源库,使得代码的可读性和可维护性得以提升。随着数据格式之间的转换日益频繁,掌握这些技术无疑为未来的数据处理工作打下了良好的基础。希望读者们能够在今后的项目中灵活运用这些知识,助力开发工作更进一步!