json转化Excel csv

var fs = require('fs');
var iconv = require('iconv-lite');


function parseObject(obj, path) {
    
    console.log(type(path))
    if (path == undefined)
        path = "";

    var type = obj.constructor;

    var scalar = (type == Number || type == String || type == Boolean || type == null);

    //如果是数组或者对象,要继续解
    if (type == Array || type == Object) {
        var d = {};
        for (var i in obj) {

            var newD = parseObject(obj[i], path + i + ".");
            Object.assign(d, newD);
        }

        return d;
    }
    else if (scalar) {
        var d = {};
        var endPath = path.substr(0, path.length-1);
        d[endPath] = obj;
        return d;
    }
    else return {};
}

//获取表头
function getCsvHeader(obj)
{
    let headerString = "";

    for (var i in obj) {        
        headerString = headerString.concat(i, ",");
    }

    headerString = headerString.substr(0, headerString.length-1);
    headerString = headerString.concat("\r\n");

    return headerString;
}

//获取表数据
function getCsvRow(obj)
{
    let rowString = "";

    for (var i in obj) {
        switch (obj[i].constructor)
        {
            //字符串转单元格时加双引号包起来,检查如果有半角逗号替换成全角(这一点已经可以不用了)
            case String:  
                var re = /,/g;
                let cellString = obj[i].replace(re, ",");        
                rowString = rowString.concat("\"", cellString, "\"", ",");
                break;
            default:
                rowString = rowString.concat(obj[i].toString(), ",");
                break;
        }        
    }

    rowString = rowString.substr(0, rowString.length-1);
    rowString = rowString.concat("\r\n");

    return rowString;
}

function convertOneFile(srcPath, desPath)
{
    let content = fs.readFileSync(srcPath).toString();

    let jsonObject = JSON.parse(content);

    if (jsonObject instanceof Array && jsonObject.length > 0)
    {
        //从第一组数据中把字段名取出来
        //let fields = getFields(jsonObject[0]);
        let csvString = "";

        for (var i = 0; i < jsonObject.length; i++)
        {
            let newOb = parseObject(jsonObject[i]);

            if (i == 0)
            {
                csvString = csvString.concat(getCsvHeader(newOb));
            }

            csvString = csvString.concat(getCsvRow(newOb));
        }

        //console.log(csvString);

        let data = iconv.encode(csvString, 'gbk');
      
        fs.writeFileSync(desPath, data, 'buffer', function(err){
            if (err != null)
            {
                console.error("error:", err);
                console.error("parse error:" + srcPath);
            }            
        });
        //jsondata2csv(jsonObject);
    }
    else
    {
        console.warn("file error, please check! ", srcPath);
    }
}



function json2excel(srcDir, files)
{
    //let srcDir = "tables\\json\\";
    let desDir = "tables\\csv\\"
    
    let count = 0;

    files.forEach(filename => {

        let dotIndex = filename.indexOf(".json")

        if (dotIndex > 0)
        {
            let desPath = desDir + filename.substr(0, dotIndex) + ".csv";

            //console.log("desPath:" + desPath);
            convertOneFile(srcDir + filename, desPath);

            count++;
        }
        
    });

    console.log("covnet complete, count:" + count);
}

function testFiles()
{
    let srcDir = "tables\\json\\"; 
    let files = ["dizidef.json"];

    json2excel(srcDir, files);
}

function main(){
    //var filename = 'jingjieleveldef.json';
    let srcDir = "D:\\gameConfig\\策划\\目标产品配置\\Json";
    let files = fs.readdirSync(srcDir);

    json2excel(srcDir, files);
}

main()

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时间溜走了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值