版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/JY_He/article/details/81284189
JSON转换为CSV文件代码,参考w417204446的博客代码实现的,稍微改了下
参考博客:https://blog.csdn.net/w417204446/article/details/53202039
依赖用到:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.7</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
实现代码如下:
package es.utils;
import org.apache.commons.beanutils.BeanUtils;
import java.io.*;
import java.lang.reflect.InvocationTargetException;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class CSVUtils {
/**
* 生成为CVS文件
* @param exportData 源数据List
* @param map csv文件的列表头map
* @param outPutPath 文件路径
* @param fileName 文件名称
*/
public static File createCSVFile(List exportData, LinkedHashMap map,String outPutPath, String fileName){
File csvFile = null;
BufferedWriter csvFileOutputStream = null;
File file = new File(outPutPath);
if (!file.exists()){
file.mkdir();
}
//定义文件名格式并创建
try {
csvFile = new File(outPutPath+"/"+fileName+".csv");
//创建临时文件会有一串随机数字
//csvFile = File.createTempFile(fileName,".csv",new File(outPutPath));
csvFileOutputStream = new BufferedWriter(new OutputStreamWriter
(new FileOutputStream(csvFile),"UTF-8"),1024);
//System.out.println("csvFileOutputStream:" + csvFileOutputStream);
//写入头部文件
for (Iterator propertyIterator = map.entrySet().iterator(); propertyIterator.hasNext();){
Map.Entry propertyEntry = (Map.Entry) propertyIterator.next();
csvFileOutputStream.write( propertyEntry.getValue() != null ?
(String) propertyEntry.getValue() : "" + "\"");
if (propertyIterator.hasNext()) {
csvFileOutputStream.write(",");
}
}
//回车换行符
csvFileOutputStream.newLine();
//写入文件内容
for (Iterator iterator = exportData.iterator();iterator.hasNext();){
Object row = iterator.next();
for (Iterator propertyIterator = map.entrySet().iterator();propertyIterator.hasNext();){
Map.Entry propertyEntry = (Map.Entry) propertyIterator.next();
//getProperty(第一个是JavaBean对象,第二个是要操作的属性名)
csvFileOutputStream.write(BeanUtils.getProperty(row, (String) propertyEntry.getKey()));
if (propertyIterator.hasNext()){
csvFileOutputStream.write(",");
}
}
if (iterator.hasNext()){
csvFileOutputStream.newLine();
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} finally {
try {
csvFileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return csvFile;
}
}
主类:
package es.utils;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Map;
public class Json2CSV {
public static void main(String[] args) {
String jsonData = getJson("json2");
JSONArray jsonArray = JSONArray.parseArray(jsonData);
//生成list用以写入CSV
LinkedList<LinkedHashMap<String, String>> exportData = new LinkedList<>();
//将JSONArray导入list
assert jsonArray != null;
for (Iterator<?> iterator = jsonArray.iterator(); iterator.hasNext();){
JSONObject jsonObject= (JSONObject) iterator.next();
//采用LinkHashMap保证写入有序
LinkedHashMap<String,String> dataMap =json2Map(jsonObject);
exportData.add(dataMap);
}
//构建表头,即列名
LinkedHashMap<String,String> headMap = new LinkedHashMap<>();
Iterator<?> it = exportData.get(0).entrySet().iterator();
while (it.hasNext()){
Map.Entry<String, String> entry = (Map.Entry<String, String>) it.next();
String key = entry.getKey();
headMap.put(key,key);
//System.out.println(headMap);
}
CSVUtils.createCSVFile(exportData, headMap, "F:/csvOutPut/json", "jsonCSV2");
}
/**
*JSON转换为map
*/
private static LinkedHashMap<String,String> json2Map(JSONObject jsonObject) {
//转换为map对象
LinkedHashMap<String, String> dateMap= new LinkedHashMap<>();
for (Map.Entry<String, Object> entry : jsonObject.entrySet()){
dateMap.put(entry.getKey(), (String) entry.getValue());
}
return dateMap;
}
/**
* 获取json字符串
* @param jsonFilePath 文件路径
*/
public static String getJson(String jsonFilePath){
URL url = Json2CSV.class.getClassLoader().getResource(jsonFilePath);
if (null!=url){
File file = new File(url.getFile());
try {
return FileUtils.readFileToString(file,"UTF-8");
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
}