Javascript nodejs中的CSV导出问题
我有excel表格和数据列表Javascript nodejs中的CSV导出问题,javascript,node.js,node-modules,Javascript,Node.js,Node Modules,我有excel表格和数据列表 读取excel数据 使用API在另一个系统中搜索excel数据 获取顶级结果数据并转换为csv文件 直到这一步工作良好。但在那之后,我需要格式化csv文件中的数据,如excel数据和搜索结果都必须显示在csv文件中 在这里,我无法将excel数据导入csv文件。例如,“Honda”是excel文件中的汽车名称,我正在读取它并搜索其他系统。这些结果需要以csv显示 请告知 Excel输入: Car name, Description Honda, some descr
Car name, Description
Honda, some description
API响应数据:
[{
"total": 10,
"results": [{
"name": {
"val": "Honda",
"id": "0271b276",
"type": "String",
},
"attributes": [{
"val": "accord",
"type": "field1",
}, {
"val": "test123",
"type": "field3",
}],
}]
},
]
CSV文件中的预期输出
Car Name , Description,Total results,Make , Model
honda , Description,10 , Honda, accord
代码
我已经格式化了您的JSON,以便更好地理解它:
let data = [
{
"total": 10,
"results": [
{
"name": {
"val": "test value1",
"id": "0271b276",
"type": "String",
},
"attributes": [
{
"val": "test value2",
"type": "field1",
},
{
"val": "test description",
"type": "field2",
},
{
"val": "test123",
"type": "field3",
}
],
}
]
},
[
{
"Make": "Honda",
"Model": "Accord"
}
]
];
这是一些奇怪的JSON。在顶层,它是一个包含两个元素的数组。第一个元素是一个对象,第二个元素是另一个数组
你要寻找的价值观似乎是
数据[1][0]。如前所述,让你的JSON看起来很奇怪。如果对该结构无能为力,我建议编写一个额外的层来从嵌套响应对象提取数据。以下是它的配置:
使用此结构,您可以var paths = [ { name: "Car Name", getter: function(resp) { return resp.results[0].name.val; } } ];
- 通过排序
数组指定列的顺序,然后路径
- 指定如何使用
函数获取数据,以及getter
- 指定如何使用
属性命名列name
我试图在下面的代码段中创建一个运行示例。请注意,我必须:var row = { }; // keys: column names, values: row's values paths.forEach(function(path) { row[path.name] = path.getter(response); });
- 模拟
库,我找不到cdnjson2csv
- 从
而不是查询
中提取响应
字段(API响应数据没有描述)描述
var响应=[{ “总数”:10, “结果”:[{ “姓名”:{ “val”:“Honda”, “id”:“0271b276”, “类型”:“字符串”, }, “属性”:[{ “val”:“accord”, “类型”:“字段1”, }, { “val”:“test123”, “类型”:“字段3”, }], }] }]; 变量路径=[{ 名称:“汽车名称”, 资料来源:“答复”, getter:函数(resp){ 返回相应的结果[0]。name.val; } }, { 名称:“说明”, 资料来源:“查询”, getter:函数(查询){ 返回查询.说明; } }, { 名称:“总成绩”, 资料来源:“答复”, getter:函数(resp){ 返回分别总计; } }, { 名称:“制造”, 资料来源:“答复”, getter:函数(resp){ 返回相应的结果[0]。name.val; } }, { 名称:“模型”, 资料来源:“答复”, getter:函数(resp){ 返回相应的结果[0]。属性[0]。val; } }]; var processResponse=函数(查询、响应){ var结果=[]; response.forEach(函数(响应){ var result={}; forEach(函数(路径){ var源; 如果(path.source==“RESPONSE”)source=RESPONSE; 如果(path.source==“QUERY”)source=QUERY,则为else; 否则返回; 结果[path.name]=path.getter(源); }); 结果。推(结果); }); var csv=json2csv({ 数据:结果, 字段:paths.map(函数(路径){ 返回path.name; }) }); var pre=文档查询选择器(“pre”); document.querySelector(“pre”).innerHTML=csv; }; var testQuery={ “汽车名称”:“本田”, “描述”:“一些描述” }; processResponse(testQuery,response); //模拟库 函数json2csv(opts){ var head=opts.fields.join(“,”); 变量行=opts.data .map(功能(obj){ 返回opts.fields.map(函数(k){ 返回obj[k]; }).加入(“,”); }) 返回[head].concat(行).join(“\n”); };代码>
我没有看到第二个数组,我看到的是一个包含对象和数组的数组。另外,正如@T.J.Crowder建议您在输出csv
中缺少一个var fieldnames
,请提供一个示例,说明您希望输出的内容。我的期望是在csv文件中包含这5列。您想要什么或问题出在哪里还不清楚。如果你想得到答案,我建议你以更容易理解的方式重新表述你的问题。如果你更新了问题,请再次检查。我合并了两种不同格式的JSON。比如var jsons=new Array();推送(数据);jsons.push(json);但是你的解决方案也不起作用。也许可以编辑你的问题,以提供一个例子,说明你希望你的CSV看起来像什么,以及真实的数据。这样我们就知道,
变量应该是什么样子。数据
var paths = [ { name: "Car Name", getter: function(resp) { return resp.results[0].name.val; } } ];
var row = { }; // keys: column names, values: row's values paths.forEach(function(path) { row[path.name] = path.getter(response); });
- 通过排序