private Resource convertJsonToExcel(String jsonString) throws IOException { ObjectMapper mapper = new ObjectMapper(); ObjectNode rootNode = mapper.readValue(jsonString, ObjectNode.class); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); Workbook workbook = new XSSFWorkbook(); // For .xlsx for (String key : Arrays.asList("flow", "liabilities", "profit")) { if (rootNode.has(key) && rootNode.get(key).isArray()) { Sheet sheet = workbook.createSheet(key); writeDataToSheet(sheet, rootNode.get(key)); } } workbook.write(outputStream); workbook.close(); return new ByteArrayResource(outputStream.toByteArray()); } private void writeDataToSheet(Sheet sheet, JsonNode arrayNode) { // Create header row Row headerRow = sheet.createRow(0); int cellNum = 0; for (String header : getHeaders(arrayNode)) { Cell cell = headerRow.createCell(cellNum++); cell.setCellValue(header); } int rowNum = 1; for (JsonNode jsonNode : arrayNode) { Row row = sheet.createRow(rowNum++); int cellNum2 = 0; for (String header : getHeaders(arrayNode)) { Cell cell = row.createCell(cellNum2++); JsonNode valueNode = jsonNode.path(header); if (valueNode != null) { cell.setCellValue(valueNode.asText()); } else { cell.setCellValue(""); // Handle missing values } } } } private Set<String> getHeaders(JsonNode arrayNode) { Set<String> headers = new LinkedHashSet<>(); for (JsonNode jsonNode : arrayNode) { jsonNode.fieldNames().forEachRemaining(headers::add); } return headers; } private Resource convertJsonToCsv(String jsonString) throws IOException { ObjectMapper mapper = new ObjectMapper(); ObjectNode rootNode = mapper.readValue(jsonString, ObjectNode.class); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); try (Writer writer = new OutputStreamWriter(outputStream, StandardCharsets.UTF_8)) { for (String key : Arrays.asList("flow", "liabilities", "profit")) { if (rootNode.has(key) && rootNode.get(key).isArray()) { JsonNode arrayNode = rootNode.get(key); writer.write(key + "\n"); // 添加表名 writeTableData(writer, arrayNode); writer.write("\n"); //表之间换行 } } String csvContent = new String(outputStream.toByteArray(), StandardCharsets.UTF_8); System.out.println("Generated CSV Content:\n" + csvContent); } return new ByteArrayResource(outputStream.toByteArray()); } private void writeTableData(Writer writer, JsonNode arrayNode) throws IOException { if (arrayNode.isEmpty()) { return; } Set<String> headers = getHeaders(arrayNode); writeCsvRow(writer, headers); for (JsonNode jsonNode : arrayNode) { List<String> rowData = new ArrayList<>(); for (String header : headers) { JsonNode node = jsonNode.get(header); rowData.add(node != null ? node.asText() : ""); } writeCsvRow(writer, rowData); } } private void writeCsvRow(Writer writer, Collection<String> values) throws IOException { StringBuilder line = new StringBuilder(); boolean first = true; for (String value : values) { if (!first) { line.append(","); } line.append(escapeCsv(value)); first = false; } line.append("\n"); writer.write(line.toString()); } private String escapeCsv(String value) { String escapedValue = value.replace("\"", "\"\""); if (escapedValue.contains(",") || escapedValue.contains("\"") || escapedValue.contains("\n")) { return "\"" + escapedValue + "\""; } return escapedValue; }
json输出csv、excel文件
转载请注明出处或者链接地址:https://www.qianduange.cn//article/22250.html
发布的文章
Python 课堂点名桌面小程序
2025-03-02 13:03:05
ArcGIS Pro可见性分析:精通地形视线与视域分析
2025-03-02 13:03:05
DeepSeek 15天指导手册——从入门到精通 PDF(附下载)
2025-03-02 13:03:05
算法002——复写零
2025-03-02 13:03:05
分布式锁—1.原理算法和使用建议一
2025-03-02 13:03:03
使用Simulink中的IsUpdated获取Rport的更新状态
2025-03-02 13:03:03
github上传代码(自用)
2025-03-02 13:03:59
卷积神经网络(Convolutional Neural Network,CNN)详细解释(带示例)
2025-03-02 13:03:59
DeepSeek、Grok 和 ChatGPT 对比分析:从技术与应用场景的角度深入探讨
2025-03-02 13:03:58
【人工智能】Deepseek 与 Kimi 联袂:重塑 PPT 创作,开启智能演示新纪元
2025-03-02 13:03:58
大家推荐的文章