- vừa được xem lúc

Cách làm sạch File CSV, Excel và JSON lộn xộn trong Node.js

0 0 1

Người đăng: Thái Thịnh

Theo Viblo Asia

Nếu bạn đang phát triển một ứng dụng Node.js xử lý các file tải lên như CSV hoặc Excel, chắc chắn bạn đã từng gặp phải những dữ liệu lộn xộn. Dưới đây là cách tôi xử lý những vấn đề như tiêu đề sai, định dạng ngày tháng kỳ lạ, và dữ liệu trùng lặp — tất cả chỉ dùng JavaScript thuần.

Vì sao các File lộn xộn là cơn ác mộng âm thầm đối với lập trình viên

Tải file lên thì dễ.

Xử lý chúng đúng cách? Không dễ chút nào.

Khi bạn làm việc với bảng tính do người dùng gửi lên hoặc dữ liệu lấy từ nguồn bên ngoài, các định dạng lộn xộn có thể nhanh chóng phá hỏng logic của bạn:

  • "Name" vs "name" vs "Full Name" trong tiêu đề
  • Các dòng chứa giá trị rỗng hoặc null
  • Định dạng ngày tháng không nhất quán (MM/DD/YYYY, DD-MM-YYYY, 2024/05/25)
  • Dữ liệu trùng lặp vượt qua kiểm tra mà không báo lỗi
  • Khoảng trắng thừa, mã hóa kỳ lạ, vấn đề BOM (Byte Order Mark)

Nếu bạn từng ngồi hàng giờ dò từng dòng dữ liệu với vô vàn tình huống ngoài dự đoán — bạn không cô đơn đâu.

Hướng dẫn từng bước làm sạch File dữ liệu trong Node.js

Đây là cách tôi xử lý các file CSV lộn xộn trong Node.js, không cần chuyển ngôn ngữ hay cài đặt cả một hệ thống khoa học dữ liệu.

Bạn sẽ học cách:

  • Phân tích (parse) file CSV
  • Chuẩn hóa tiêu đề
  • Loại bỏ giá trị rỗng / null
  • Chuẩn hóa định dạng ngày tháng
  • Loại bỏ dữ liệu trùng lặp
  • Tổng hợp tất cả thành một tiện ích có thể tái sử dụng

1. Phân tích File CSV trong Node.js

const fs = require('fs');
const csv = require('csv-parser'); function parseCSV(path) { return new Promise((resolve, reject) => { const rows = []; fs.createReadStream(path) .pipe(csv()) .on('data', (row) => rows.push(row)) .on('end', () => resolve(rows)) .on('error', reject); });
}

Hàm này sẽ đọc file và trả về dữ liệu dưới dạng mảng các object trong JavaScript.

2. Chuẩn hóa tiêu đề cột

Tiêu đề sai định dạng có thể phá vỡ toàn bộ logic. Hãy chuẩn hóa từ sớm:

function normalizeHeaders(row) { const cleanRow = {}; for (const key in row) { const newKey = key.trim().toLowerCase().replace(/\s+/g, '_'); cleanRow[newKey] = row[key].trim(); } return cleanRow;
}

Ví dụ: "Full Name"full_name, " age "age.

3. Xóa các trường Null hoặc Rỗng

function cleanRow(row) { const cleaned = {}; for (const key in row) { const val = row[key]; if (val !== null && val !== '' && val !== undefined) { cleaned[key] = val; } } return Object.keys(cleaned).length ? cleaned : null;
}

Việc này giúp dữ liệu gọn gàng và an toàn hơn để xử lý tiếp.

4. Chuẩn hóa định dạng ngày với dayjs

npm install dayjs Then use it: const dayjs = require('dayjs'); function fixDate(value) { const parsed = dayjs(value, ['MM-DD-YYYY', 'DD/MM/YYYY', 'YYYY-MM-DD'], true); return parsed.isValid() ? parsed.toISOString() : value;
}

Tất cả ngày tháng được chuyển về định dạng chuẩn ISO: 2024-05-25T00:00:00.000Z.

5. Loại bỏ dữ liệu trùng lặp trong JavaScript

function deduplicate(data) { const seen = new Set(); return data.filter(row => { const key = JSON.stringify(row); if (seen.has(key)) return false; seen.add(key); return true; });
}

Rất hiệu quả để bắt các dòng trùng lặp có thể gây lỗi logic hoặc vi phạm ràng buộc database.

6. Hàm tổng hợp: Làm sạch File từ A đến Z

async function cleanFile(path) { const raw = await parseCSV(path); const cleaned = raw .map(normalizeHeaders) .map(cleanRow) .filter(Boolean); return deduplicate(cleaned);
}

Giờ bạn sẽ có một mảng object gọn gàng, sạch sẽ, sẵn sàng xử lý.

Điều tuyệt vời nhất? Không cần xử lý Excel phức tạp, không cần Python, không cần lo lắng!

Một số mẹo thêm cho dự án thực tế

  • Dùng gói xlsx để hỗ trợ đọc file Excel một cách mượt mà.
  • Ghi log các dòng bị loại bỏ — cực kỳ hữu ích cho việc debug và báo cáo.
  • Xác thực sự tồn tại của các cột bắt buộc ngay từ đầu để tránh mất dữ liệu.
  • Với các file lớn, hãy xử lý theo kiểu stream để tránh tràn bộ nhớ khi chạy ở môi trường production.

Cảm ơn các bạn đã theo dõi!

Bình luận

Bài viết tương tự

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

1 1 563

- vừa được xem lúc

Hướng dẫn làm bot Facebook messenger cho tài khoản cá nhân

Giới thiệu. Trong bài viết trước thì mình có hướng dẫn các bạn làm chatbot facebook messenger cho fanpage. Hôm nay mình sẽ hướng dẫn các bạn tạo chatbot cho một tài khoản facebook cá nhân. Chuẩn bị.

0 0 387

- vừa được xem lúc

Crawl website sử dụng Node.js và Puppeteer - phần 2

trong phần 1 mình đã giới thiệu về puppeteer và tạo được 1 project cùng một số file đầu tiên để các bạn có thể crawl dữ liệu từ một trang web bất kỳ. Bài này mình sẽ tiếp nối bài viết trước để hoàn thiện seri này.

0 0 79

- vừa được xem lúc

Điều React luôn giữ kín trong tim

■ Mở đầu. Ngồi viết bài khi đang nghĩ vu vơ chuyện con gà hay quả trứng có trước, mình phân vân chưa biết sẽ chọn chủ đề gì để chúng ta có thể cùng nhau bàn luận.

0 0 63

- vừa được xem lúc

Gửi Mail với Nodejs và AWS SES

AWS SES. AWS SES là gì.

0 0 89

- vừa được xem lúc

Crawl website sử dụng Node.js và Puppeteer - phần 1

Bài viết này mình sẽ giới thiệu cho các bạn craw dữ liệu của web site sử dụng nodejs và Puppeteer. .

0 0 168