JAVA:将CSV文件转换成JSON

需求

将从数据库导出的csv文件以指定对应的key转换成json。

思路

  1. 使用openCSV读取csv文件。
  2. 给定一个String数组,保存json的keys。
  3. 遍历csv的每行数组,遍历keys和一行的所有列,append到一个json中。将得到的json添加到一个数组中,最后返回这个json数组。

实现

1.pom依赖

        <dependency>
            <groupId>net.sf.opencsv</groupId>
            <artifactId>opencsv</artifactId>
            <version>2.3</version>
        </dependency>

        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20090211</version>
        </dependency>

2.Csv2JsonUtils 

主要包含三个方法:

  • readCSV:读取csv文件,同时指定编码方式,解决中文乱码问题。
  • csv2JSON:将一行数据转换成一个JSONObject。
  • csv2JSON:将所有数据转换成JSONObject数组。
package com.wuzixuan.csv2json;

import au.com.bytecode.opencsv.CSVReader;
import org.json.JSONException;
import java.io.*;
import java.util.List;
import org.json.JSONObject;

public class Csv2JsonUtils {

    /**
     * 读取csv,返回一个Iterator<String[]>,每个String[]表示csv中的一行数据
     * @return List<String[]>
     * @throws IOException
     */
    public List<String[]> readCSV(String csvName) throws IOException {
        File file = new File(csvName);
        DataInputStream dataInputStream = new DataInputStream(new FileInputStream(file));
        CSVReader csvReader = new CSVReader(new InputStreamReader(dataInputStream,"utf-8"));
        List<String[]> stringsList = csvReader.readAll();
        return stringsList;
    }


    /**
     * 将csv中的一行数据转换成一个一级json
     * @param keys json的key,顺序需与csv中的value对应
     * @param values csv中数据作为value
     * @return
     */
    public JSONObject csv2JSON(String[] keys,String[] values) throws JSONException {

        JSONObject json = new JSONObject();
        for (int i = 0; i < keys.length; i++) {
            try{
                json.append(keys[i],values[i]);
            }
            catch (ArrayIndexOutOfBoundsException e){
                json.append(keys[i],null);
            }
        }
        return json;
    }

    /**
     * 将csv的每一行数据都转换成一级json,返回json数组
     * @param keys json的key,顺序需与csv中的value对应
     * @param stringsList 读取csv返回的List<String[]>
     * @return
     */
    public JSONObject[] csv2JSON(String[] keys,List<String[]> stringsList) throws JSONException {

        JSONObject[] jsons = new JSONObject[stringsList.size()];
        int index = 0 ;
        for (String[] strings : stringsList
             ) {
            JSONObject json = this.csv2JSON(keys, strings);
            jsons[index] = json;
            index ++ ;
        }
        return jsons;
    }
}

3.测试

测试数据

以下为csv文件,包含两列,A列为商品id,B列为商品名称。

测试代码

package com.wuzixuan.csv2json;

import org.json.JSONObject;
import java.util.List;

public class Test {
    public static void main(String[] args) {
        Csv2JsonUtils csvUtils = new Csv2JsonUtils();

        //定义json的key
        String[] keys = new String[2];
        keys[0]="id";
        keys[1]="name";

        JSONObject[] jsons = null;

        try {
            //通过定义的key,从csv中创建json数组
            List<String[]> list = csvUtils.readCSV("C:\\Users\\zixuan.wu\\something\\test1.csv");
            jsons = csvUtils.csv2JSON(keys, list);

            //遍历json数组,打印数据
            for (JSONObject json : jsons
            ) {
                System.out.println("----------------");
                for (int i = 0; i < keys.length; i++) {
                    System.out.println("key:" + keys[i] + "  value:" + json.getString(keys[i]));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

测试输出

 

 

 

 

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值