将对象树存储为 csv/xlsx



我有一个这样的对象:

{
    "Group1": {
        "Category1": "Value1 | Value2 | Value3",
        "Category2": "Value1 | Value2 | Value3"
    },
    "Group2": {
        "Category3": "Value1 | Value2 | Value3",
        "Category4": "Value1 | Value2 | Value3"
    }
} 

我试图得到的东西应该看起来像这样:

截图

无论是

CSV 还是 XLSX,我尝试使用 npm 中的一些包来转换 json -> csv/xlsx,得到了一些结果,但不是我正在寻找的那个。

到目前为止,我唯一的想法是像我的第二个 sreenshot 一样获取一个数组,然后使用 npm 中的一些特殊包将其转换为 CSV:

截图

但也许有一些更简单的解决方案?任何帮助将不胜感激!和平!

您可以通过将对象更改为具有空键的对象来采用一种方法,并在结果集中将所有嵌套属性映射到一个空格

基本上,它获取对象的条目并查找其他对象,如果是这样,它会再次调用该函数或获取结果集中新行的键和值。

每个递归结果集在行中填充一个空格,对于所有嵌套属性,您将获得相应的缩进。

function getCSV(object) {
    return Object.entries(object).reduce((r, [k, v]) => {
        if (v && typeof v === 'object') {
            if (k) r.push([k]);
            r.push(...getCSV(v).map(a => ['', ...a]));
        } else {
            r.push([k, v]);
        }
        return r;
    }, []);
}
var data = { Group1: { Category1: "Value1 | Value2 | Value3", Category2: "Value1 | Value2 | Value3" }, Group2: { Category3: "Value1 | Value2 | Value3", Category4: "Value1 | Value2 | Value3" } },
    result = getCSV({ '': data });
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

或者为想要的空字符串使用间隔数组。

function getCSV(object, length = 0) {
    var spacer = Array.from({ length }, _ => '');
    return Object.entries(object).reduce((r, [k, v]) => {
        if (v && typeof v === 'object') {
            r.push(spacer.concat(k));
            r.push(...getCSV(v, length + 1));
        } else {
            r.push(spacer.concat([k, v]));
        }
        return r;
    }, []);
}
var data = { Group1: { Category1: "Value1 | Value2 | Value3", Category2: "Value1 | Value2 | Value3" }, Group2: { Category3: "Value1 | Value2 | Value3", Category4: "Value1 | Value2 | Value3" } },
    result = getCSV(data, 1);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

最新更新