开发者问题收集

如何使用 papa-parse-angular2

2017-04-28
9835

想要使用 papa-parse-angular2 将 CSV 转换为 JSON。没有找到任何示例,所以我这样做了。

app.module.ts

import {CSVService} from 'papa-parse-angular2';
@NgModule({
providers: [
CSVService, ...

xx.component.ts

constructor( private csvService: CSVService, ...
private x1() {
    let file = ...;
    this.csvService.parse(file, {
        complete: function(results) {
          // take results.data
        }
      });

没有构建问题。但运行时,出现以下错误。 在此处输入图像描述

Uncaught TypeError: Cannot read property 'length' of undefined
    at CSVHandler.guessHeaders (vendor.bundle.js:105749)
    at CSVHandler.formHeaders (vendor.bundle.js:105734)
    at CSVHandler.setHeaders (vendor.bundle.js:105761)
    at vendor.bundle.js:64297
    at ZoneDelegate.invoke (vendor.bundle.js:137052)
    at Object.onInvoke (vendor.bundle.js:4532)
    at ZoneDelegate.invoke (vendor.bundle.js:137051)
    at Zone.run (vendor.bundle.js:136812)
    at NgZone.run (vendor.bundle.js:4401)
    at vendor.bundle.js:64293
    at SafeSubscriber.schedulerFn [as _next] (vendor.bundle.js:4247)
    at SafeSubscriber.__tryOrUnsub (vendor.bundle.js:14620)
    at SafeSubscriber.next (vendor.bundle.js:14569)
    at Subscriber._next (vendor.bundle.js:14509)
    at Subscriber.next (vendor.bundle.js:14473)
    at EventEmitter.Subject.next (vendor.bundle.js:15308)
    at EventEmitter.emit (vendor.bundle.js:4221)

不知道如何修复。或者在 angular 4 中还有其他库可以将 CSV 转换为 JSON?非常感谢您的帮助。

3个回答

您可以使用 ngx-papaparse

首先安装库:

对于 Angular 6( docs ):

npm install ngx-papaparse --save

还有一个适用于 Angular 2/4 Angular 5 的版本。

然后将其导入到您的模块中(不必是您的 AppModule):

import { PapaParseModule } from 'ngx-papaparse';

@NgModule({
  ...
  imports: [
    ...
    PapaParseModule
  ]
})

解析 CSV:

import { Component } from '@angular/core';
import { Papa } from 'ngx-papaparse';

@Component({
  ...
})
export class AppComponent {

    constructor(private papa: Papa) {
        let csvData = '"Hello","World!"';

        this.papa.parse(csvData,{
            complete: (result) => {
                console.log('Parsed: ', result);
            }
        });
    }
}

您还可以解析文件,而不是字符串。只需将 csvData 替换为文件即可。

免责声明:我创建了该库。

Albert Haff
2018-02-09

您可以简单地使用 papaparser

import * as Papa from 'papaparse/papaparse.min.js';

使用

onUpload(file: File) {
   Papa.parse(file, {
    complete: function(results) {
        console.log("Finished:", results.data);
     }
   });
}

但是,一个缺点是您不会获得任何 papaparse 的类型定义

Manpreet singh
2017-05-17

安装 papaparse @types/papaparse 。这将启用 IDE intellisense 的类型定义。

然后,您可以导入整个 papaparse 模块

import * as Papa from 'papaparse'

或将所需的导入指定为

import { parse } from 'papaparse'

与第三方包装器相比,我们更推荐使用这种方法,因为它们更新频率不高,或者社区支持有限。

Kaustubh Badrike
2020-05-16