Exportar JSON a archivo CSV en Angular

En este artículo, aprenderemos cómo convertir una array JSON en CSV y cómo exportar CSV como un archivo descargable usando Blob en angular 8 .

Demostración: https://stackblitz.com/edit/angular8-json-to-csv

Paso 1: Conversión de JSON a CSV
Para convertir datos JSON a formato CSV, utilice el siguiente método.

ConvertToCSV(objArray, headerList) {
    let array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;
    let str = '';
    let row = 'S.No, ';
    for (let index in headerList) {
        row += headerList[index] + ', ';
    }
    row = row.slice(0, -1);
    str += row + '\r\n';
    for (let i = 0; i & lt; array.length; i++) {
        let line = (i + 1) + & #039; 039;;
        for (let index in headerList) {
            let head = headerList[index];
            line += & #039;,  039; + array[i][head];
        }
        str += line + & #039;\r\n 039;;
    }
    return str;
}

El primer parámetro es Array of Objects, y el segundo parámetro es la lista de encabezados, generalmente las claves de Json.

Paso 2: exportar CSV como un archivo descargable.
Para exportar datos CSV como un archivo .csv , use el siguiente método.

downloadFile(data, filename = 'data') {
    let csvData = this.ConvertToCSV(data, [
      'name', 'age', 'average', 'approved', 'description']);
    console.log(csvData)
    let blob = new Blob(['\ufeff' + csvData], {
        type: 'text/csv;charset=utf-8;'
    });
    let dwldLink = document.createElement("a");
    let url = URL.createObjectURL(blob);
    let isSafariBrowser = navigator.userAgent.indexOf(
      'Safari') != -1 & amp; & amp;
    navigator.userAgent.indexOf('Chrome') == -1;
    
    //if Safari open in new window to save file with random filename.
    if (isSafariBrowser) { 
        dwldLink.setAttribute("target", "_blank");
    }
    dwldLink.setAttribute("href", url);
    dwldLink.setAttribute("download", filename + ".csv");
    dwldLink.style.visibility = "hidden";
    document.body.appendChild(dwldLink);
    dwldLink.click();
    document.body.removeChild(dwldLink);
}

El método de descarga acepta dos parámetros, el primer parámetro en JSONdata y el segundo parámetro es el nombre de archivo. el nombre de archivo predeterminado aquí es data . En el método downloadFile llamamos al método ConvertToCSV que convierte el JSON a CSV.

Un objeto Blob representa un objeto similar a un archivo de datos sin procesar e inmutables. Los blobs representan datos que no están necesariamente en un formato nativo de JavaScript. La interfaz de archivo se basa en Blob, hereda la funcionalidad de blob y la expande para admitir archivos en el sistema del usuario.

app.service.ts: cree un nuevo archivo de servicio con el nombre app.component.ts

import {
    Injectable
}
from '@angular/core';
@Injectable()
export class AppService {
    downloadFile(data, filename = 'data') {
        let csvData = this.ConvertToCSV(data, [
            'name', 'age', 'average', 'approved', 'description'
        ]);
        console.log(csvData)
        let blob = new Blob(['\ufeff' + csvData], {
            type: 'text/csv;charset=utf-8;'
        });
        let dwldLink = document.createElement("a");
        let url = URL.createObjectURL(blob);
        let isSafariBrowser = navigator.userAgent.indexOf(
            'Safari') != -1 & amp; & amp;
        navigator.userAgent.indexOf('Chrome') == -1;
        /if Safari open in new window to save file with random filename.
        if (isSafariBrowser) {
            /
            dwldLink.setAttribute("target", "_blank");
        }
        dwldLink.setAttribute("href", url);
        dwldLink.setAttribute("download", filename + ".csv");
        dwldLink.style.visibility = "hidden";
        document.body.appendChild(dwldLink);
        dwldLink.click();
        document.body.removeChild(dwldLink);
    }
    ConvertToCSV(objArray, headerList) {
        let array =
            typeof objArray != 'object' ? JSON.parse(objArray) : objArray;
        let str = '';
        let row = 'S.No, ';
        for (let index in headerList) {
            row += headerList[index] + ', ';
        }
        row = row.slice(0, -1);
        str += row + '\r\n';
        for (let i = 0; i & lt; array.length; i++) {
            let line = (i + 1) + & #039; 039;;
            for (let index in headerList) {
                let head = headerList[index];
                line += & #039;,  039; + array[i][head];
            }
            str += line + & #039;\r\n 039;;
        }
        return str;
    }
}

Ahora que tenemos nuestro archivo de servicio, use este archivo de servicio en nuestro componente para enviar los datos y verifique si nuestro método downloadFile funciona correctamente o no. Antes de crear el componente, primero importe nuestro servicio en app.module.ts

aplicación.módulo.ts:

import { AppService } from './app.service';
@NgModule({
  providers: [AppService],
})</pre>
  
<h5>app.component.ts:-</h5>
<pre>
import { Component } from '@angular/core';
import { AppService } from './app.service';
@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent  {
constructor(private appService:AppService) {  }
  jsonData =  [
      {
        name: "Anil Singh",
        age: 33,
        average: 98,
        approved: true,
        description: "I am active blogger and Author."
      },
      {
        name: 'Reena Singh',
        age: 28,
        average: 99,
        approved: true,
        description: "I am active HR."
      },
      {
        name: 'Aradhya',
        age: 4,
        average: 99,
        approved: true,
        description: "I am engle."
      },
    ];
  download(){
    this.appService.downloadFile(this.jsonData, 'jsontocsv');
  }
}

Salida: archivo app.component.html

Publicación traducida automáticamente

Artículo escrito por anjisingavaram y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *