首页 前端知识 json输出csv、excel文件

json输出csv、excel文件

2025-03-02 13:03:16 前端知识 前端哥 884 566 我要收藏
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;
}
转载请注明出处或者链接地址:https://www.qianduange.cn//article/22250.html
标签
评论
发布的文章

算法002——复写零

2025-03-02 13:03:05

github上传代码(自用)

2025-03-02 13:03:59

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!