java - 如何在java中将json文件转换为excel文件
问题描述
我遇到了将JSON
文件转换为 excel 文件的问题,简而言之就是将JSON
数据转换为 excel 数据。尝试映射JSON
键和值,但做不到。
尝试映射JSON
键和值,但做不到。我已经使用过 apache POI api。
public class jsontoexcel {
public static void main(String[] args) throws IOException,JSONException {
jsontoexcel json4=new jsontoexcel();
JSONObject json=json4.ReadJson();
JSONArray array =new JSONArray();
JSONObject rowjson=json.getJSONArray("rows").getJSONObject(0);
XSSFWorkbook workbook=new XSSFWorkbook();
XSSFSheet sheet=workbook.createSheet("Company Details");
int len=rowjson.length();
String[] RowArr=new String[len];
Iterator<String> keys = rowjson.keys();
int i=0;
while(keys.hasNext())
{
RowArr[i]=keys.next();
System.out.print("key:"+keys);
i++;
}
List<String> slist= new ArrayList<String>();
slist=json.get(rowjson.toString(keys));
FileOutputStream out=new FileOutputStream(new File("C:\\code\\eclipse\\jsontoexcel\\src\\output.xlsx"));
createHeaderRow(sheet, RowArr);
workbook.write(out);
out.close();
// Map<String,Object> map=new Map<String,Object>();
}
public static void createHeaderRow(XSSFSheet sheet, String[] RowArr)
{
Row row=sheet.createRow(0);
for(int i=0;i<RowArr.length-1;i++)
{
Cell cellTitle=row.createCell(i+1);
String cellVal=RowArr[i];
System.out.print("Cell data" + cellVal);
}
}
}
我希望输出存储在一个 excel 文件中。标题正在打印,但没有打印值。
解决方案
Excel
除非真的需要,否则不要生成文件。如果您想生成没有任何特定格式、图表、宏等的数据,只需CSV
使用纯数据生成文件即可。要读取JSON
和生成CSV
,您可以使用支持这两种数据格式的Jackson库。假设你的JSON
样子如下:
{
"rows": [
{
"id": 1,
"name": "Vika",
"age": 27
},
{
"id": 2,
"name": "Mike",
"age": 28
}
]
}
您需要创建POJO
适合该结构的模型,反序列化为JSON
对象并将对象序列化以CSV
格式化。示例解决方案,可能如下所示:
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SequenceWriter;
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;
import java.io.File;
import java.util.List;
public class JsonApp {
public static void main(String[] args) throws Exception {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();
ObjectMapper jsonMapper = new ObjectMapper();
Response response = jsonMapper.readValue(jsonFile, Response.class);
CsvMapper csvMapper = new CsvMapper();
CsvSchema schema = csvMapper.schemaFor(Item.class).withHeader();
SequenceWriter sequenceWriter = csvMapper.writer(schema).writeValues(System.out);
sequenceWriter.writeAll(response.getRows());
}
}
class Response {
private List<Item> rows;
// getters, setters
}
@JsonPropertyOrder({"id", "name", "age"})
class Item {
private int id;
private String name;
private int age;
// getters, setters
}
上面的代码打印:
id,name,age
1,Vika,27
2,Mike,28
也可以看看:
推荐阅读
- python - pip-18.0 出现“找不到日志记录模块”错误
- javascript - 如何根据两个数字范围获取 0 - 1 的范围
- git - 包含新子模块的 Git 拉取分支
- java - 日志记录:在 Spring Boot 中使用属性文件实现 Log4j2
- kubernetes - 无法让 Traefik 使用 Kubernetes 在 Centos 7.5 上工作
- objective-c - 在 Cocoa App 中将多行标题设置为 NSButton
- mongodb - 使用错误 ID 存储的嵌入式根对象
- python - 当我使用python自动知道应用程序名称时,如何在任务管理器中找到任务名称?
- javascript - 无法加载文件或程序集“cefsharp.core”
- java - MessageDigest 为同一个文件提供两个不同的哈希