将JSON对象转换为特定的CSV格式

将JSON对象转换为特定的CSV格式,json,node.js,excel,csv,npm,Json,Node.js,Excel,Csv,Npm,我想把这个换成 { "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中打开时,它将如下

我想把这个换成

{
    "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中打开时,它将如下所示


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

可能是您可以尝试使用此npm模块
csvjson


链接在这里:-

我通过编写自己的脚本解决了这个问题。根据数据的格式,我不得不做一些调整以满足我的需要。这不是最优雅的解决方案。我很快就找到了解决办法。如果有人想尝试编写自己的脚本来将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");