Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于CSV生成的JSON扁平化和数组属性上的对象复制_Javascript_Node.js_Json_Csv_Flat - Fatal编程技术网

Javascript 用于CSV生成的JSON扁平化和数组属性上的对象复制

Javascript 用于CSV生成的JSON扁平化和数组属性上的对象复制,javascript,node.js,json,csv,flat,Javascript,Node.js,Json,Csv,Flat,我正在寻找一种将JSON数据转换为平面的“类似csv”数据对象的方法。在某种程度上,我希望将mongodb集合“sqlirize”。我已经检查了NPM中的一些json平面库,但没有一个完全解决了我的问题。我用自己的方式解决了这个问题,但我想知道是否有更有效的方法 我有一个通过API以以下方式呈现数据的集合: [{ "data": { "name": "John", "age": 23, "friends": [{ "

我正在寻找一种将JSON数据转换为平面的“类似csv”数据对象的方法。在某种程度上,我希望将mongodb集合“sqlirize”。我已经检查了NPM中的一些json平面库,但没有一个完全解决了我的问题。我用自己的方式解决了这个问题,但我想知道是否有更有效的方法

我有一个通过API以以下方式呈现数据的集合:

[{
    "data": {
        "name": "John",
        "age": 23,
        "friends": [{
            "name": "Arya",
            "age": 18,
            "gender": "female"
        }, {
            "name": "Sansa",
            "age": 20,
            "gender": "female"
        }, {
            "name": "Bran",
            "age": 17,
            "gender": "male"
        }]
    }
}, {
    "data": {
        "name": "Daenerys",
        "age": 24,
        "friends": [{
            "name": "Grey Worm",
            "age": 20,
            "gender": "male"
        }, {
            "name": "Missandei",
            "age": 17,
            "gender": "female"
        }]
    }
}]
这是我创建的一个函数,用于刷新一个安全的平坦json(即:除数组外,所有内容都是平坦的)

const{cloneDeep}=require('lodash'))
常数展平=需要(“展平”)
常数reflaten=(项目)=>{
常数重新格式化=[]
items.forEach(item=>{
设数组=false
用于(对象的常量键。键(项)){
if(Array.isArray(项[键]){
数组=真
const children=数组(项[key].length).fill().map(()=>cloneDeep(项))
for(设i=0;i{
children[i][`key}.${k}]=children[i][key][i][k]
})
删除子项[i][key]
重新格式化。推送(子项[i])
}
打破
}
}
if(!数组){
重新格式化。推送(项目)
}
})
返回reflatted.length==items.length
?回流
:回流(回流)
}
常量行=[]
用于(项目的常数项){
常数展平=[展平(项目)]
行。推(…回流(平)]
}
console.log(行)
预期(和当前)输出如下:

[{
    "data.name": "John",
    "data.age": 23,
    "data.friends.name": "Arya",
    "data.friends.age": 18,
    "data.friends.gender": "female"
}, {
    "data.name": "John",
    "data.age": 23,
    "data.friends.name": "Sansa",
    "data.friends.age": 20,
    "data.friends.gender": "female"
}, {
    "data.name": "John",
    "data.age": 23,
    "data.friends.name": "Bran",
    "data.friends.age": 17,
    "data.friends.gender": "male"
}, {
    "data.name": "Daenerys",
    "data.age": 24,
    "data.friends.name": "Grey Worm",
    "data.friends.age": 20,
    "data.friends.gender": "male"
}, {
    "data.name": "Daenerys",
    "data.age": 24,
    "data.friends.name": "Missandei",
    "data.friends.age": 17,
    "data.friends.gender": "female"
}]

虽然我实现了预期的输出,但我一直想知道是否还有其他库,或者是否有更有效的方法来实现它。

由于您的代码已经在运行,因此建议您将其发布在insteadwow中。谢谢,我不知道它的存在。我会的。因为您的代码已经在运行,所以建议您发布谢谢,我不知道它的存在,我会的。