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
大家推荐的文章