CSV (Comma-Separated Values — Giá trị phân cách bằng dấu phẩy) là định dạng bảng dữ liệu thuần văn bản, trong đó mỗi dòng là một bản ghi dữ liệu và các trường trong bản ghi được phân tách bằng một dấu phân cách, thường là dấu phẩy. CSV là định dạng trao đổi dữ liệu tiêu chuẩn từ những ngày đầu của máy tính cá nhân, được chuẩn hóa trong RFC 4180. Bảng tính, cơ sở dữ liệu và các công cụ xuất dữ liệu đều tạo ra CSV vì nó đơn giản, nhỏ gọn và có thể đọc được bởi hầu hết mọi ngôn ngữ lập trình.
JSON (JavaScript Object Notation) biểu diễn dữ liệu có cấu trúc dưới dạng các cặp khóa-giá trị và mảng có thứ tự. Khác với CSV, JSON hỗ trợ các đối tượng lồng nhau, các giá trị có kiểu dữ liệu (số, boolean, null) và các bản ghi có độ dài khác nhau. Vì JSON được các engine JavaScript hiểu ngay lập tức, nó là định dạng chủ đạo cho trao đổi dữ liệu giữa trình duyệt và máy chủ, cũng như phản hồi REST API. Những đặc điểm này khiến JSON trở thành định dạng mặc định cho web API, tệp cấu hình và các cơ sở dữ liệu NoSQL như MongoDB và CouchDB.
Chuyển đổi CSV sang JSON nghĩa là ánh xạ từng hàng của bảng thành một đối tượng JSON, dùng hàng tiêu đề làm tên thuộc tính và giá trị ô làm giá trị thuộc tính. Kết quả thường là một mảng JSON các đối tượng. Việc chuyển đổi này cần thiết khi bạn muốn đưa dữ liệu bảng phẳng vào một hệ thống yêu cầu đầu vào JSON có cấu trúc, chẳng hạn như REST API, thành phần bảng dữ liệu ở frontend, hoặc cơ sở dữ liệu theo hướng tài liệu.
Tại sao sử dụng công cụ này?
Bộ chuyển đổi này phân tích CSV ngay trong trình duyệt, tạo đầu ra JSON tức thì và không bao giờ gửi dữ liệu của bạn lên máy chủ.
⚡
Chuyển đổi tức thì
Dán CSV và nhận đầu ra JSON ngay lập tức. Không cần chờ máy chủ xử lý hay tải tệp lên. Chuyển đổi diễn ra khi bạn gõ.
🔒
Xử lý ưu tiên quyền riêng tư
Dữ liệu của bạn ở lại trong tab trình duyệt. Không có gì được truyền qua mạng. An toàn cho các tập dữ liệu nội bộ, thông tin xác thực hoặc dữ liệu cá nhân không được phép rời khỏi máy của bạn.
🔀
Tự động phát hiện dấu phân cách
Công cụ nhận diện dấu phẩy, tab, chấm phẩy và pipe làm dấu phân cách. Bạn cũng có thể đặt dấu phân cách thủ công nếu tệp của bạn dùng ký tự phân cách ít phổ biến hơn.
📋
Sao chép hoặc tải xuống
Sao chép kết quả JSON vào bộ nhớ tạm bằng một cú nhấp hoặc tải xuống dưới dạng tệp .json. Sẵn sàng để dùng trực tiếp trong mã, công cụ API client hoặc thao tác nhập cơ sở dữ liệu.
Các trường hợp sử dụng CSV sang JSON
Phát triển Frontend
Chuyển đổi tệp CSV xuất từ công cụ thiết kế hoặc bảng tính thành JSON để dùng làm dữ liệu mẫu cho các thành phần React, Vue hoặc Angular trong quá trình tạo nguyên mẫu.
Khởi tạo dữ liệu cho Backend API
Chuyển đổi các bản sao lưu cơ sở dữ liệu CSV thành payload JSON để khởi tạo dữ liệu cho REST hoặc GraphQL API. Nhiều ORM và công cụ migration chấp nhận tệp fixture JSON để tải dữ liệu ban đầu.
Cấu hình DevOps
Chuyển đổi danh sách kiểm kê CSV hoặc ma trận môi trường thành JSON để sử dụng trong Ansible playbook, tệp biến Terraform hoặc cấu hình pipeline CI/CD.
Chuẩn bị dữ liệu kiểm thử QA
Chuyển đổi ma trận kiểm thử dựa trên bảng tính thành mảng JSON để các framework kiểm thử như Jest, pytest hoặc Playwright sử dụng cho kiểm thử theo dữ liệu.
Pipeline Kỹ thuật dữ liệu
Chuyển đổi đầu ra CSV từ các truy vấn SQL hoặc xuất ETL thành JSON để tải vào các kho lưu trữ tài liệu như MongoDB, Elasticsearch hoặc chế độ nhập JSON của BigQuery.
Dự án sinh viên và Học tập
Nhanh chóng chuyển đổi các tập dữ liệu CSV mẫu (Kaggle, cổng dữ liệu mở của chính phủ) thành JSON để sử dụng trong bài tập phát triển web, hướng dẫn hoặc dự án cá nhân.
Tham khảo dấu phân cách CSV
Tệp CSV không phải lúc nào cũng dùng dấu phẩy. Dấu phân cách phụ thuộc vào ngôn ngữ hệ thống, ứng dụng xuất dữ liệu và nội dung dữ liệu. Dưới đây là bốn dấu phân cách phổ biến nhất và khi nào mỗi loại thường được sử dụng:
Dấu phân cách
Tiêu chuẩn
Phần mở rộng
Ghi chú
Comma (,)
RFC 4180 default
.csv
Most common; Excel default export
Tab (\t)
TSV variant
.tsv
Avoids quoting fields that contain commas
Semicolon (;)
European locale CSV
.csv
Used where comma is the decimal separator (DE, FR, BR)
Pipe (|)
Fixed-width alternative
.csv
Rare in field values, good for messy data
So sánh CSV và JSON: Khác biệt về cấu trúc
Sự khác biệt giữa hai định dạng là lý do tại sao việc ánh xạ tiêu đề, suy luận kiểu dữ liệu và xử lý giá trị thiếu đòi hỏi các quyết định rõ ràng trong quá trình chuyển đổi.
CSV
Định dạng phẳng, hướng hàng. Mỗi bản ghi có cùng số trường. Tất cả giá trị là chuỗi trừ khi bên tiêu thụ suy luận kiểu. Không hỗ trợ lồng nhau hoặc các bản ghi có độ dài khác nhau. Hàng tiêu đề là tùy chọn theo RFC 4180, nhưng bắt buộc để chuyển đổi JSON có ý nghĩa.
JSON
Định dạng cây, tự mô tả. Mỗi đối tượng có thể có các khóa khác nhau. Giá trị có kiểu dữ liệu: chuỗi, số, boolean, null, đối tượng hoặc mảng. Hỗ trợ độ lồng tùy ý. Thứ tự thuộc tính không được đảm bảo bởi đặc tả JSON (ECMA-404), mặc dù hầu hết các bộ phân tích đều giữ nguyên thứ tự chèn.
Ví dụ mã
Cách chuyển đổi CSV sang JSON theo cách lập trình trong các ngôn ngữ và công cụ CLI phổ biến:
import csv, json, io
csv_string = """name,age,city
Alice,30,Berlin
Bob,25,Tokyo"""
reader = csv.DictReader(io.StringIO(csv_string))
data = [row for row in reader]
print(json.dumps(data, indent=2))
# → [{"name": "Alice", "age": "30", "city": "Berlin"}, ...]
# With type coercion (age as int)
import pandas as pd
df = pd.read_csv(io.StringIO(csv_string))
print(df.to_json(orient="records", indent=2))
# → [{"name": "Alice", "age": 30, "city": "Berlin"}, ...]
Go
package main
import (
"encoding/csv"
"encoding/json"
"fmt"
"strings"
)
func main() {
input := "name,age,city\nAlice,30,Berlin\nBob,25,Tokyo"
r := csv.NewReader(strings.NewReader(input))
records, _ := r.ReadAll()
headers := records[0]
var result []map[string]string
for _, row := range records[1:] {
obj := make(map[string]string)
for i, h := range headers {
obj[h] = row[i]
}
result = append(result, obj)
}
out, _ := json.MarshalIndent(result, "", " ")
fmt.Println(string(out))
// → [{"age":"30","city":"Berlin","name":"Alice"}, ...]
}
CLI (jq + Miller)
# Using Miller (mlr) — handles quoting, types, and edge cases
mlr --icsv --ojson cat data.csv
# → [{"name": "Alice", "age": 30, "city": "Berlin"}, ...]
# Using csvjson from csvkit (Python-based)
csvjson data.csv
# Using jq with @csv (reverse: JSON → CSV)
# For CSV → JSON, pipe through Miller or Python
cat data.csv | python3 -c "
import csv, json, sys
reader = csv.DictReader(sys.stdin)
json.dump(list(reader), sys.stdout, indent=2)
"
Câu hỏi thường gặp
Bộ chuyển đổi xử lý tệp CSV không có hàng tiêu đề như thế nào?
Nếu CSV của bạn không có hàng tiêu đề, bộ chuyển đổi sẽ dùng các khóa được tạo tự động như "field1", "field2", v.v. Để có kết quả tốt nhất, hãy thêm hàng tiêu đề trước khi chuyển đổi, hoặc đổi tên các khóa trong đầu ra JSON sau đó.
Điều gì xảy ra với các trường được trích dẫn có chứa dấu phẩy hoặc xuống dòng?
Bộ phân tích tuân theo quy tắc trích dẫn RFC 4180. Các trường được bao trong dấu ngoặc kép có thể chứa dấu phẩy, xuống dòng và thậm chí dấu ngoặc kép (được thoát bằng ""). Bộ chuyển đổi loại bỏ dấu ngoặc kép bên ngoài và giữ nguyên nội dung bên trong dưới dạng một giá trị chuỗi JSON duy nhất.
Quá trình chuyển đổi có giữ nguyên kiểu dữ liệu như số và boolean không?
CSV là định dạng không có kiểu dữ liệu; tất cả giá trị ô đều là chuỗi. Bộ chuyển đổi này xuất ra các giá trị chuỗi theo mặc định để tránh mất dữ liệu. Nếu bạn cần đầu ra có kiểu, hãy phân tích kết quả JSON trong ứng dụng của bạn và ép kiểu các trường một cách tường minh. Các thư viện như Papa Parse (JavaScript) và pandas (Python) cung cấp tùy chọn kiểu động trong quá trình phân tích.
Tôi có thể chuyển đổi CSV dùng dấu chấm phẩy hoặc tab thay vì dấu phẩy không?
Có. Công cụ hỗ trợ dấu phẩy, tab, chấm phẩy và pipe làm dấu phân cách. Chọn dấu phân cách đúng từ menu thả xuống, hoặc để chế độ tự động phát hiện nhận diện. Dấu chấm phẩy phổ biến trong các tệp CSV xuất từ Excel theo ngôn ngữ châu Âu, nơi dấu phẩy được dùng làm dấu phân cách thập phân.
Có giới hạn kích thước tệp cho đầu vào CSV không?
Vì quá trình xử lý diễn ra hoàn toàn trong trình duyệt của bạn, giới hạn thực tế phụ thuộc vào bộ nhớ khả dụng của thiết bị. Các tệp đến 10–20 MB thường chuyển đổi không gặp vấn đề trên phần cứng hiện đại. Đối với các tệp rất lớn (hàng trăm MB), hãy dùng bộ phân tích phát trực tuyến như Papa Parse trong Node.js hoặc module csv của Python, xử lý dữ liệu từng hàng mà không tải toàn bộ vào bộ nhớ.
Làm thế nào để xử lý các hàng CSV có số lượng cột khác nhau?
CSV không đều (các hàng có ít hoặc nhiều trường hơn tiêu đề) rất phổ biến trong các tệp xuất thực tế. Bộ chuyển đổi này điền các trường thiếu bằng chuỗi rỗng và bỏ qua các trường thừa vượt quá số lượng tiêu đề. Nếu dữ liệu của bạn liên tục không đều, hãy kiểm tra tệp nguồn để tìm các dấu phân cách chưa được thoát hoặc dấu ngoặc kép bị thiếu.
Sự khác biệt giữa đầu ra mảng JSON và đối tượng JSON là gì?
Mảng JSON các đối tượng là đầu ra tiêu chuẩn: mỗi hàng CSV trở thành một đối tượng trong mảng, với tên tiêu đề làm khóa. Một số công cụ cũng cung cấp đầu ra "hướng cột" trong đó mỗi tiêu đề trở thành một khóa với một mảng tất cả các giá trị trong cột đó. Định dạng mảng các đối tượng phổ biến hơn cho API, cơ sở dữ liệu và ràng buộc dữ liệu frontend.