json写csv文件

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
    }

}

猜你喜欢

转载自blog.csdn.net/JY_He/article/details/81284189