java——fastjson 解析超大文件,将json文件转为csv文件

转换前:

{
    "result": [
        {
            "class": "A5", 
            "student": [
                "name", 
                "age", 
                "sex"
            ], 
            "values": [
                [
                    "aaa", 
                    "12", 
                    "M"
                ], 
                [
                    "bbb", 
                    "13", 
                    "F"
                ]
            ]
        }
    ], 
    "code": 0
}

转换逻辑:

public class Test {
    public static void main(String[] args) throws IOException {

        File file = new File("C:\\Users\\Administrator\\Desktop\\aaa.json");

        new Test().json2csv(file);
    }


    public File json2csv(File jsonFile) throws IOException {
        JSONReader reader = null;
        BufferedWriter bufferedWriter = null;
        try {
            reader = new JSONReader(new FileReader(jsonFile));

            File target = new File(jsonFile.getParent(), "inventory.csv");

            bufferedWriter = new BufferedWriter(new FileWriter(target));

            reader.startObject();

            while (reader.hasNext()) {

                String name = reader.readString();

                if (name.equalsIgnoreCase("result")){
                    readResultPart(reader,bufferedWriter);

                }else if (name.equalsIgnoreCase("code")){
                    reader.readInteger();
                }
            }

            reader.endObject();

            bufferedWriter.close();

            return target;


        } catch (Exception e) {
           e.printStackTrace();

        }finally {
            if (null != reader){
                reader.close();
            }
            bufferedWriter.close();
        }
        return null;
    }


    private  void readResultPart(JSONReader reader,BufferedWriter writer) throws IOException {

        reader.startArray();

        while (reader.hasNext()){
            reader.startObject();

            while (reader.hasNext()){
                String key = reader.readString();

                if (key.equalsIgnoreCase("class")){
                    reader.readString();
                }else if (key.equalsIgnoreCase("student")){
                    reader.startArray();
                    StringBuilder  attrNames = new StringBuilder();
                    while (reader.hasNext()){
                        attrNames.append(",\""+reader.readString()+"\"");
                    }
                    reader.endArray();

                    writer.write(attrNames.toString());
                }else if (key.equalsIgnoreCase("values")){
                    reader.startArray();

                    while (reader.hasNext()){
                        writer.newLine();
                        writer.write(readValueSubArray(reader));
                    }

                    reader.endArray();
                }

            }
            reader.endObject();
        }

        reader.endArray();

    }


    private String readValueSubArray(JSONReader reader){

        StringBuilder stringBuilder = new StringBuilder();

        reader.startArray();

        while (reader.hasNext()){
            stringBuilder.append(",\""+reader.readString()+"\"");
        }

        reader.endArray();

        return stringBuilder.toString();
    }
}

转换后:

,"name","age","sex"
,"aaa","12","M"
,"bbb","13","F"

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值