Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.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 nodejs中的CSV导出问题_Javascript_Node.js_Node Modules - Fatal编程技术网

Javascript nodejs中的CSV导出问题

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

我有excel表格和数据列表

  • 读取excel数据
  • 使用API在另一个系统中搜索excel数据
  • 获取顶级结果数据并转换为csv文件
  • 直到这一步工作良好。但在那之后,我需要格式化csv文件中的数据,如excel数据和搜索结果都必须显示在csv文件中

    在这里,我无法将excel数据导入csv文件。例如,“Honda”是excel文件中的汽车名称,我正在读取它并搜索其他系统。这些结果需要以csv显示

    请告知

    Excel输入:

    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);
      });
      
      我试图在下面的代码段中创建一个运行示例。请注意,我必须:

      • 模拟
        json2csv
        库,我找不到cdn
      • 查询
        而不是
        响应
        中提取
        描述
        字段(API响应数据没有描述)
      当然,此代码段是在浏览器中运行的,可能需要一些额外的工作才能将其移植到NodeJ

      主要的一点是,它显示了如何指定两种数据格式之间的转换逻辑

      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”);
      };
      
      输出csv
      
      我没有看到第二个数组,我看到的是一个包含对象和数组的数组。另外,正如@T.J.Crowder建议您在
      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);
      });