Java Excel转JSON:高效数据转换的实践指南
引言:为什么需要Excel转JSON?
在企业级应用开发中,Excel常用于存储和导出数据,而JSON因其轻量级和易于解析的特性,成为Web API和数据交换的首选格式。使用Java进行Excel转JSON,能够实现自动化数据迁移、简化系统集成,并提升数据处理效率。
准备工作:选择合适的Java库
要实现Excel转JSON,需依赖以下核心库:
- Apache POI:用于读取和操作Excel文件(.xls或.xlsx格式)。
- Jackson:将Java对象序列化为JSON,或反序列化JSON数据。
通过Maven或Gradle添加依赖:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.14.2</version>
</dependency>
基础步骤:实现简单的Excel转JSON
以下代码示例展示了如何将Excel单个工作表转换为JSON数组:
import org.apache.poi.ss.usermodel.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.*;
import java.util.*;
public class ExcelToJsonConverter {
public static void main(String[] args) throws Exception {
// 1. 读取Excel文件
FileInputStream fis = new FileInputStream("data.xlsx");
Workbook workbook = WorkbookFactory.create(fis);
Sheet sheet = workbook.getSheetAt(0);
// 2. 获取表头(第一行)
Row headerRow = sheet.getRow(0);
List<String> headers = new ArrayList<>();
for (Cell cell : headerRow) {
headers.add(cell.getStringCellValue());
}
// 3. 遍历数据行并构建JSON对象
List<Map<String, Object>> dataList = new ArrayList<>();
for (int i = 1; i <= sheet.getLastRowNum(); i++) {
Row row = sheet.getRow(i);
if (row == null) continue;
Map<String, Object> dataMap = new LinkedHashMap<>();
for (int j = 0; j < headers.size(); j++) {
Cell cell = row.getCell(j);
dataMap.put(headers.get(j), getCellValue(cell));
}
dataList.add(dataMap);
}
// 4. 转换为JSON并输出
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(dataList);
System.out.println(json);
workbook.close();
}
private static Object getCellValue(Cell cell) {
if (cell == null) return null;
switch (cell.getCellType()) {
case STRING: return cell.getStringCellValue();
case NUMERIC: return cell.getNumericCellValue();
case BOOLEAN: return cell.getBooleanCellValue();
default: return null;
}
}
}
此代码适用于结构简单的表格,能将每行数据映射为JSON对象,并组织成数组。
进阶处理:应对复杂场景
在实际项目中,可能需要处理更多复杂情况:
- 多Sheet转换:遍历工作簿中的所有工作表,为每个Sheet生成独立的JSON结构。
- 空值与格式处理:在
getCellValue方法中增加日期、公式等单元格类型的判断,并对空值设置默认值。 - 大文件优化:使用
SAXParser事件驱动模式读取Excel,避免内存溢出。 - 数据类型映射:通过注解或配置将Excel列名映射为自定义的JSON字段名。
总结与最佳实践
使用Java进行Excel转JSON,关键在于选择合适的库并设计健壮的数据读取逻辑。建议:
- 始终使用
try-with-resources确保文件流关闭。 - 根据数据规模选择DOM或SAX解析方式。
- 结合POI的样式API保留单元格格式信息(如数字精度)。
- 通过单元测试验证转换结果的正确性。
掌握这些技巧后,您可以轻松应对各种数据转换需求,提升开发效率。