6

想使用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)

不知道如何修复。或其他库以角度 4 将 CSV 转换为 JSON?感谢任何帮助。

4

4 回答 4

8

你可以使用ngx-papaparse

首先安装库:

对于 Angular 6(文档):

npm install ngx-papaparse --save

还有一个Angular 2/4Angular 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为文件。

免责声明:我创建了图书馆。

于 2018-02-09T10:31:14.220 回答
4

您可以简单地使用papaparser

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

使用

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

然而,一个缺点是你不会得到 papaparse 的任何类型定义

于 2017-05-17T12:46:18.053 回答
2

安装papaparse@types/papaparse。这将为 IDE 智能感知启用类型定义。

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

import * as Papa from 'papaparse'

或将所需的导入指定为

import { parse } from 'papaparse'

推荐使用这种方法而不是第三方包装器,因为它们更新不那么频繁,或者背后的社区努力有限。

于 2020-05-16T12:46:44.763 回答
0

导入 PapaParser 如下所述:

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

然后像这样使用:

private x1() {
 let file = ...;
  Papa.parse(file, {
  header: true,
  skipEmptyLines: true,
  complete: (results) => {
    let parsedData = results.data; 
  }
})
于 2017-12-18T16:26:52.950 回答