Node.js将csv文件转换为json formate

时间:2018-03-07 11:02:59

标签: javascript arrays json node.js csv

我是编程的初学者。我正在从文件中读取csv数据然后我需要将csv数据转换为json formate。 这是我的csv数据文件:

import { Component, OnInit } from '@angular/core';
import { AppDataService } from '../../services/app-data.service';
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import { NgForOf } from '@angular/common';
import { UserDetails } from '../../model/UserDetails';

import * as _ from 'underscore';

import { PaginationService } from '../../shared/pagination/pagination.service';

@Component({
  selector: 'app-admin',
  templateUrl: './admin.component.html',
  styleUrls: ['./admin.component.scss']
})
export class AdminComponent implements OnInit  {
    private  users:  any[] ;
    pager: any = {};
    pagedItems: any[];
    error = '';
    page = 1;

    constructor(private appDataService: AppDataService, private paginationService: PaginationService) {
    }

    ngOnInit() {
        this.loadData();
    }

    loadData() {
        this.appDataService.getUsers()
       .subscribe(
        data => {
            //LOAD YOUR DATA 
            this.users = data ;

            this.setPage(1);
         },
         error => {
           this.error = 'Error in calling users!';

         }
       );
    }

    setPage(page: number) {
        if (page < 1 || page > this.pager.totalPages) {
            return;
        }
        if (isNaN(page)) {
            page = 1;
        }

        this.pager = this.paginationService.getPager(this.users.length, page);

        this.pagedItems = this.users.slice(this.pager.startIndex, this.pager.endIndex + 1);
    }

}

我期待像这样的输出

batch_id  ingredient_code   quantity    expiry_date
1             item1           1000      18-01-2019
1             item2           500       18-02-2019
2             item1           1000      18-01-2019
3             item2           1000      18-08-2019
4             item2           1000      18-01-2019
4             item1           1000      18-05-2019
4             item3           500       18-04-2019
5             item4           1000      18-01-2019

我期待的是批次ID应该显示单次,该批次ID的所有项目都应该添加到数组中。 提前致谢..... 抱歉英语不好

5 个答案:

答案 0 :(得分:2)

您必须安装csvtojson节点模块,您可以通过键入以下内容来执行此操作:

npm install csvtojson --save

这应该在项目中创建一个node_modules目录,该目录将包含csvtojson所需的所有依赖项。

既然我们已经完成了所有设置,我们就可以开始实施了。在首选文本编辑器中打开项目并创建一个新的js文件。在此文件中添加以下代码。有关详细信息,请访问https://www.npmjs.com/package/csvtojson

//require the csvtojson converter class 
var Converter = require("csvtojson").Converter;
// create a new converter object
var converter = new Converter({});

// call the fromFile function which takes in the path to your 
// csv file as well as a callback function
converter.fromFile("./path-to-your-file.csv",function(err,result){
    // if an error has occured then handle it
    if(err){
        console.log("An Error Has Occured");
        console.log(err);  
    } 
    // create a variable called json and store
    // the result of the conversion
    var json = result;

    // log our json to verify it has worked
    console.log(json);
});

答案 1 :(得分:1)

Csv文件与js文件位于同一位置,安装节点模块 csvtojson

var csv = require("csvtojson");
csv().fromFile('a.csv').on("json",function(jsonArrayObj){ 
     console.log(jsonArrayObj); 
   })

答案 2 :(得分:0)

  1. 创建一张空地图。
  2. 逐行迭代数据。
  3. 用逗号分隔每一行。
  4. 使用批处理ID作为键并在映射中查找它,它存在,将数据推送到数组中,否则使用包含该行数据的数组初始化该键。
  5. 迭代键并从中创建一个数组。

答案 3 :(得分:0)

您可以通过在节点模块中安装 csvtojson 并输入以下命令来实现它:

npm install csvtojson --save

您可以在from-csv-file-to-json-array上获得更多详细信息。

答案 4 :(得分:0)

2个步骤:

1)在终端中运行npm i -g csvtojson

2)在文件所在的终端中运行csvtojson source.csv > converted.json。请注意,“ source.csv”是要转换的文件,“ converted.json”是要生成的文件。

有关文档,请参见here