Как отформатировать данные перед загрузкой в ​​виде файла CSV?

Я пытаюсь загрузить некоторые данные в виде CSV, но получаю следующее в файле:

[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

Я использую хранитель файлов

И вот как я это делаю:

  const downloadFile = () => {

    const formatCSVData = shipmentsCSV.shipments.map(data => ({
      Courier: data.courierName,
      Status: data.status.name,
    }));

    console.info('formatCSVData', JSON.stringify(formatCSVData, null, 2));

    const blob = new Blob([formatCSVData], {
      type: 'text/csv;charset=UTF-8',
    });

    saveAs(blob, 'CSV.txt');
  };

Второй console.info записывает это (26 элементов, но я собираюсь упростить их до 4):

[
  {
    "Courier Name": "Hand Delivery",
    "Status": "Received"
  },
  {
    "Courier Name": null,
    "Status": "Pending"
  },
  {
    "Courier Name": null,
    "Status": "Canceled"
  },
  {
    "Courier Name": "FedEx",
    "Status": "Canceled"
  }
  ...
]

Итак, как мне правильно распечатать данные в файле CSV?

CSV - это набор строк, каждая из которых содержит строки, разделенные запятыми. Нигде вы не вставляете запятые или символы новой строки. В основном вам понадобится что-то вроде data.map(obj => obj.join(",")).join("\n"), при условии, что data представляет собой массив массивов.

Chris G 10.01.2019 19:11
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
114
1

Ответы 1

Попробуйте это решение:

Как преобразовать JSON в формат CSV и сохранить в переменной

function ConvertToCSV(objArray) {
            var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;
            var str = '';

            for (var i = 0; i < array.length; i++) {
                var line = '';
                for (var index in array[i]) {
                    if (line != '') line += ','

                    line += array[i][index];
                }

                str += line + '\r\n';
            }

            return str;
        }

И ваш код будет:

const downloadFile = () => {

    const shipments = shipmentsCSV.shipments.map(data => ({
      Courier: data.courierName,
      Status: data.status.name,
    }));

    const formatCSVData = ConvertToCSV(shipments);
    console.info('formatCSVData', JSON.stringify(formatCSVData, null, 2));

    const blob = new Blob([formatCSVData], {
      type: 'text/csv;charset=UTF-8',
    });

    saveAs(blob, 'CSV.txt');
  };

Другие вопросы по теме