Как преобразовать CSV в файл JSON со значениями, разделенными запятыми, в Node.js?

Опубликовано: 28 Июля, 2021

CSV - это файл значений, разделенных запятыми, с расширением .csv, который позволяет сохранять данные в табличном формате. Вот статья для преобразования данных файла csv в нотацию объектов JavaScript (JSON ) без использования стороннего пакета npm. Основное отличие от нормального преобразования является то , что значения любой строки могут быть разделены запятой , и , как известно, различные столбцы, также разделенные запятой.

В этом подходе мы введем содержимое файла CSV в массив и разделим содержимое массива на основе разделителя. Все строки CSV будут преобразованы в объекты JSON, которые будут добавлены в результирующий массив, который затем будет преобразован в JSON, и будет сгенерирован соответствующий выходной файл JSON.

Подход:
Следуйте инструкциям ниже, чтобы найти решение:

  1. Прочтите файл csv, используя стандартный пакет fs npm.
  2. Преобразуйте данные в String и разделите их на массив.
  3. Создайте массив заголовков.
  4. Для всех оставшихся n-1 строк выполните следующие действия:
    • Создайте пустой объект, чтобы добавить к нему значения текущей строки.
    • Объявите строку str как текущее значение массива, чтобы изменить разделитель и сохранить сгенерированную строку в новой строке s.
    • Если мы сталкиваемся с открывающей кавычкой («), мы оставляем запятые как есть, в противном случае мы заменяем их вертикальной чертой« | »
    • Продолжайте добавлять символы, которые мы проходим, в String s.
    • Разделите строку с помощью разделителя вертикальной черты | и сохраните значения в массиве свойств.
    • Для каждого заголовка, если значение содержит несколько данных, разделенных запятыми, мы сохраняем его в виде массива, в противном случае сохраняется непосредственно значение.
    • Добавьте сгенерированный объект в наш массив результатов.
  5. Преобразуйте полученный массив в json и сгенерируйте выходной файл JSON.

Имя файла: app.js

javascript




// Reading the file using default
// fs npm package
const fs = require( "fs" );
csv = fs.readFileSync( "CSV_file.csv" )
// Convert the data to String and
// split it in an array
var array = csv.toString().split( " " );
// All the rows of the CSV will be
// converted to JSON objects which
// will be added to result in an array
let result = [];
// The array[0] contains all the
// header columns so we store them
// in headers array
let headers = array[0].split( ", " )
// Since headers are separated, we
// need to traverse remaining n-1 rows.
for (let i = 1; i < array.length - 1; i++) {
let obj = {}
// Create an empty object to later add
// values of the current row to it
// Declare string str as current array
// value to change the delimiter and
// store the generated string in a new
// string s
let str = array[i]
let s = ''
// By Default, we get the comma separated
// values of a cell in quotes " " so we
// use flag to keep track of quotes and
// split the string accordingly
// If we encounter opening quote (")
// then we keep commas as it is otherwise
// we replace them with pipe |
// We keep adding the characters we
// traverse to a String s
let flag = 0
for (let ch of str) {
if (ch === '"' && flag === 0) {
flag = 1
}
else if (ch === '"' && flag == 1) flag = 0
if (ch === ', ' && flag === 0) ch = '|'
if (ch !== '"' ) s += ch
}
// Split the string using pipe delimiter |
// and store the values in a properties array
let properties = s.split( "|" )
// For each header, if the value contains
// multiple comma separated data, then we
// store it in the form of array otherwise
// directly the value is stored
for (let j in headers) {
if (properties[j].includes( ", " )) {
obj[headers[j]] = properties[j]
.split( ", " ).map(item => item.trim())
}
else obj[headers[j]] = properties[j]
}
// Add the generated object to our
// result array
result.push(obj)
}
// Convert the resultant array to json and
// generate the JSON output file.
let json = JSON.stringify(result);
fs.writeFileSync( 'output.json' , json);

Вход:

Запустите команду «node app.js» на терминале, чтобы запустить программу.

Выход:

Создается файл output.json, и содержимое файла регистрируется на терминале.