首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将api调用结果导出为单次响应值为一行的csv?

如何将api调用结果导出为单次响应值为一行的csv?
EN

Stack Overflow用户
提问于 2020-03-31 23:53:18
回答 1查看 51关注 0票数 0

我的api响应如下

代码语言:javascript
复制
    [
    {
        "What time is it?": [
            "option_2"
        ]
    },
    {
        "When will we go home?": [
            "option_1"
        ]
    },
    {
        "When is your birthday?": [
            "2050"
        ]
    },
    {
        "How much do you sleep?": [
            "Ajajajsjiskskskskdkdj"
        ]
    }
],
[
    {
        "What time is it?": [
            "option_2"
        ]
    },
    {
        "When will we go home?": [
            "option_1"
        ]
    },
    {
        "When is your birthday?": [
            "10181"
        ]
    },
    {
        "How much do you sleep?": [
            "Ajskossooskdncpqpqpwkdkdkskkskskksksksksks"
        ]
    }
]

现在在react中,我想将结果导出为csv。我可以通过export-to-csv来完成,但是格式化是这里的问题。我希望在标签(问题)下的一行中显示单个答案中每个问题的值。因此,如果我有两个类似上面的回答,我希望导出它在两行,而不是8,因为有8个问题。下面是我想要的导出方式。

到目前为止,我已经尝试过这样的方法,但没有成功。

这是我的导出数据函数

代码语言:javascript
复制
exp =()=>{

  const raw = []
  console.log(this.state.data[0].sbm_id)
    axios.get(`/dashboard/${this.props.proj_id}/whole_sub/`)
        .then(res=>{
          // console.log('1')
          // console.log(res.data[0][0])
          // console.log('2')
          for (let i =0;i<this.state.data.length;i++){
            for(let j = 0;j<res.data[0].length;j++){
         // let sub=[]
          //res.data[i][j].ID = this.state.data[i].sbm_id
            raw.push(res.data[i][j])
            }
          }
        }
        )

          let curr = this.state
          curr.exp = raw
          this.setState({exp:curr.exp})



        }

下面是我的导出函数

代码语言:javascript
复制
rawExport=()=>{


  const csvExporter = new ExportToCsv(optionsExp);

  csvExporter.generateCsv(this.state.exp);

}
EN

回答 1

Stack Overflow用户

发布于 2020-04-01 00:52:13

第一步是展平初始嵌套数组,以获得均匀形状的数组,然后继续减少它。

代码语言:javascript
复制
const data = [
	[
		{
			"What time is it?": [
				"option_2"
			]
		},
		{
			"When will we go home?": [
				"option_1"
			]
		},
		{
			"When is your birthday?": [
				"2050"
			]
		},
		{
			"How much do you sleep?": [
				"Ajajajsjiskskskskdkdj"
			]
		}
	],
	[
		{
			"What time is it?": [
				"option_2"
			]
		},
		{
			"When will we go home?": [
				"option_1"
			]
		},
		{
			"When is your birthday?": [
				"10181"
			]
		},
		{
			"How much do you sleep?": [
				"Ajskossooskdncpqpqpwkdkdkskkskskksksksksks"
			]
		}
	]
];

const flattenArray = (arr) => [].concat.apply([], arr);

// Flatten the initial array
const flattenedArray = flattenArray(data);

// Keep on reducing the flattened array into an object
var res = flattenedArray.reduce((acc, curr) => {
	const [key, val] = flattenArray(Object.entries(curr));
	if (!acc[key]) {
		acc[key] = [].concat(val);
	} else {
		val.forEach(x => {
			if (!acc[key].includes(x)) {
				acc[key].push(x);
			}
		});
	}
	return acc;
}, {});

console.log(res);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60954672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档