【问题标题】:Convert a JSON object to a particular CSV format将 JSON 对象转换为特定的 CSV 格式
【发布时间】:2019-02-01 14:42:27
【问题描述】:

我要转换这个

{
    "Name A":{
        "Name B":{
            "Name C":"Value C",
            "Name D":"Value D",
            "Name E":"Value E"
        }
    }
}

到这里

Name A,,,
,Name B,,
,, Name C,Value C
,, Name D,Value D
,,Name E,Value E

在excel中打开时是这样的

我试图通过运行一个小脚本来实现这一点,但在此之前我想检查是否有任何节点包或工具可以轻松实现这一点。有什么线索吗?

【问题讨论】:

    标签: json node.js excel csv npm


    【解决方案1】:

    我通过编写自己的脚本解决了这个问题。我不得不根据数据的格式进行一些调整以适应我的需要。这不是最优雅的解决方案。这是我开始工作的快速肮脏的解决方案。如果有人想尝试编写自己的脚本将 JSON 转换为 CSV,这仍然是一个很好的参考

    var fs = require('fs');
    
    var file = 'templateEn.json';
    
    var content = fs.readFileSync(file, { encoding: 'binary' });
    
    var obj = JSON.parse(content);
    
    var jsonString = ""
    
    var lineEnd   = "\r\n";
    
    var firstLevelKeys = Object.keys(obj);
    jsonString      += firstLevelKeys[0] + ",,,,," + lineEnd;
    var secondLevelKeys  = Object.keys(obj["en"]);
    secondLevelKeys.forEach(key => {
        jsonString     += ',' + key +',,,,'+ lineEnd
        var thirdLevelKeys  = Object.keys(obj["en"][key]);
        thirdLevelKeys.forEach(key2=>{
            if (typeof obj["en"][key][key2] === "string"){
                jsonString += ",," + key2 + ',"' + obj["en"][key][key2]+'",,'+ lineEnd;
            }
            else if (typeof obj["en"][key][key2] === "object"){
                var fourthLevelKeys  = Object.keys(obj["en"][key][key2]);
                    jsonString      += ',,' + key2 + ',,,' + lineEnd
                fourthLevelKeys.forEach(key3 => {
                    if (typeof obj["en"][key][key2][key3] === "string") {
                        jsonString += ",,," + key3 + ',"' + obj["en"][key][key2][key3] + '",' + lineEnd;
                    }
                    else if (typeof obj["en"][key][key2][key3] === "object") {
                        var fifthLevelKeys  = Object.keys(obj["en"][key][key2][key3]);
                            jsonString     += ',,,' + key3 + ',,' + lineEnd
                        fifthLevelKeys.forEach(key4 => {
                            if (typeof obj["en"][key][key2][key3][key4] === "string") {
                                jsonString += ",,,," + key4 + ',"' + obj["en"][key][key2][key3][key4] + '"' + lineEnd;
                            }
                        })
                    }
                })
            }
        });
    
    });
    
    fs.writeFileSync("generated.csv", jsonString, "utf8");
    

    【讨论】:

      【解决方案2】:

      也许你可以试试这个 npm 模块csvjson
      链接在这里:-https://www.npmjs.com/package/csvjson

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-06
        • 2019-05-28
        • 1970-01-01
        • 2012-06-30
        • 2023-03-08
        • 2016-02-12
        • 2018-06-19
        相关资源
        最近更新 更多