如何将嵌套对象数组转换为CSV?

用户名

我有一个带有嵌套对象的数组,例如:

[
    {"name": "1", "children": [{"name": "1.1", "children":"1.2"}]},
    {"id": "2", "thing": [{"name": "2.1", "children":"2.2"}]},
    {"name": "3", "stuff": [{"name": "3.1", "children":"3.2"}]},
]

这些对象可以包含不同类型的值,包括其他嵌套对象。

我想将此数组转换为CSV格式。

我尝试使用for .. in循环,常规的嵌套for循环.map()和递归进行迭代我认为,递归可能是解决此特定问题的唯一方法。对于CSV字段名称,我想使用导致该值的键序列。

对于给定的示例,我正在寻找的CSV结果是:

name, children.name, children.children,id, thing.name, thing.children,  stuff.name, stuff.children
1, 1.1, 1.2,
,,,2,2.1,2.2
3,,,,3,3.1,3.2
亭子

您可以使用此ES6函数创建所需的2D数组,然后可以轻松将其转换为CSV:

function pivot(arr) {
    var mp = new Map();
    
    function setValue(a, path, val) {
        if (Object(val) !== val) { // primitive value
            var pathStr = path.join('.');
            var i = (mp.has(pathStr) ? mp : mp.set(pathStr, mp.size)).get(pathStr);
            a[i] = val;
        } else {
            for (var key in val) {
                setValue(a, key == '0' ? path : path.concat(key), val[key]);
            }
        }
        return a;
    }
    
    var result = arr.map( obj => setValue([], [], obj) );
    return [[...mp.keys()], ...result];
}

function toCsv(arr) {
    return arr.map( row => 
        row.map ( val => isNaN(val) ? JSON.stringify(val) : +val ).join(',')
    ).join('\n');
}

// Sample data
var arr = [
    {"name": "1", "children": [{"name": "1.1", "children":"1.2"}]},
    {"id": "2", "thing": [{"name": "2.1", "children":"2.2"}]},
    {"name": "3", "stuff": [{"name": "3.1", "children":"3.2"}]},
];

// Conversion to 2D array and then to CSV:
console.log(toCsv(pivot(arr)));
.as-console-wrapper { max-height: 100% !important; top: 0; }

有关将2D数组转换为CSV的其他方法,请参阅此问答

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将数组转换为嵌套的普通对象

如何将嵌套数组转换为对象

如何将数组对象转换为数组 csv 类型

如何将普通数组转换为嵌套到父对象的嵌套对象

如何将嵌套对象数组递归转换为平面对象数组?

如何将带有嵌套对象的数组对象转换为CSV文件

如何将数组转换为对象

如何将数组转换为对象

如何将数组转换为对象?

如何将数组转换为对象?

在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量?

如何将嵌套的对象数组类型转换为嵌套的字符串列表

如何将一个对象转换为带有嵌套对象的数组?

如何将对象数组转换为嵌套对象?

如何将嵌套数组列表转换为数组

如何将纯嵌套数组转换为实体对象的集合?

如何将平面JavaScript对象数组转换为嵌套的分层JSON结构?

如何将多个对象索引转换为嵌套数组?

拆分后如何将数组转换为嵌套的json对象

如何将嵌套的json转换为Javascript中的对象数组?

如何将字符串数组转换为自定义嵌套对象

如何将嵌套数组转换为简单的打字稿对象

如何将 .geojson 文件转换为带有嵌套数组的 JavaScript 对象?

如何将包含对象的对象转换为对象数组

如何将包含数组的对象转换为对象的对象

如何将数组对象转换为数组数组?

如何将数组中的数组转换为数组对象

如何将嵌套的 JSON 对象转换为数据框?

如何将递归/嵌套的OpenStruct对象转换为Hash