Chuyển JSON sang CSV

Chuyển đổi mảng JSON sang định dạng CSV

Chạy cục bộ · An toàn để dán thông tin bí mật
CSV sẽ hiển thị ở đây…

Chuyển đổi JSON sang CSV là gì?

Chuyển đổi JSON sang CSV biến đổi dữ liệu có cấu trúc từ định dạng JSON thành các giá trị phân cách bằng dấu phẩy — định dạng bảng mà các bảng tính, cơ sở dữ liệu và công cụ phân tích sử dụng trực tiếp. JSON lưu trữ dữ liệu dưới dạng các đối tượng và mảng lồng nhau không có schema cố định. CSV lưu trữ dữ liệu dưới dạng hàng và cột với hàng tiêu đề xác định tên trường. Việc chuyển đổi này là cách dữ liệu API được đưa vào bảng tính và cơ sở dữ liệu.

CSV (Comma-Separated Values) được định nghĩa bởi RFC 4180. Mỗi dòng là một bản ghi, và các trường trong một dòng được phân cách bằng ký tự dấu phân cách, thường nhất là dấu phẩy. Các trường chứa dấu phân cách, dấu ngoặc kép hoặc ngắt dòng phải được đặt trong dấu ngoặc kép, với các dấu ngoặc kép bên trong được thoát bằng cách nhân đôi chúng. Việc thoát ký tự này là nguồn gốc chính của lỗi khi tự viết bộ chuyển đổi JSON sang CSV.

Việc chuyển đổi rất đơn giản khi đầu vào là một mảng phẳng các đối tượng có key nhất quán. Mỗi đối tượng trở thành một hàng, và mỗi key duy nhất trở thành tiêu đề cột. Các đối tượng và mảng lồng nhau cần bước làm phẳng, và các key không nhất quán giữa các đối tượng cần chiến lược xử lý trường thiếu — thường để ô trống. Một bộ chuyển đổi đáng tin cậy xử lý tất cả các trường hợp ngoại lệ này tự động.

Tại sao cần chuyển đổi JSON sang CSV?

API trả về JSON, nhưng bảng tính, cơ sở dữ liệu SQL và công cụ BI cần dữ liệu dạng bảng. Chuyển đổi JSON sang CSV giúp bạn di chuyển dữ liệu giữa các hệ thống này mà không cần viết script nhập tùy chỉnh.

Chuyển đổi ngay trên trình duyệt
Dán JSON của bạn và tải file ngay lập tức. Không upload lên server, không giới hạn kích thước file từ API bên ngoài, không cần chờ hàng đợi xử lý.
🔒
Xử lý ưu tiên bảo mật
Dữ liệu của bạn ở lại trong trình duyệt. Quá trình chuyển đổi chạy hoàn toàn bằng JavaScript trên thiết bị của bạn. Dữ liệu xuất từ cơ sở dữ liệu, bản ghi người dùng và dữ liệu tài chính không bao giờ rời khỏi máy của bạn.
🔀
Hỗ trợ nhiều dấu phân cách
Chọn giữa dấu phẩy, chấm phẩy, tab hoặc pipe làm dấu phân cách. Dùng chấm phẩy cho bảng tính với locale châu Âu, tab cho file TSV, hoặc pipe cho các hệ thống cũ.
📋
Không cần tài khoản
Mở trang và chuyển đổi ngay. Không cần đăng ký, không cần API key, không cần cài CLI. Hoạt động trên mọi thiết bị có trình duyệt hiện đại.

Các trường hợp sử dụng JSON sang CSV

Xuất dữ liệu API cho bảng tính
REST API trả về JSON. Quản lý sản phẩm và nhà phân tích cần dữ liệu đó trong Excel hoặc Google Sheets. Chuyển đổi phản hồi API sang CSV và mở trực tiếp trong bất kỳ ứng dụng bảng tính nào.
Nhập hàng loạt vào cơ sở dữ liệu
PostgreSQL COPY, MySQL LOAD DATA và SQLite .import đều chấp nhận CSV. Chuyển đổi tập dữ liệu sang định dạng bảng để nạp hàng loạt nhanh mà không cần viết script nhập tùy chỉnh.
Tạo mẫu ETL Pipeline
Các ETL pipeline thường có đầu ra trung gian khó kiểm tra dưới dạng JSON thô. Chuyển đổi đầu ra của một bước sang CSV và mở trong bảng tính để xác minh các phép biến đổi trước khi kết nối toàn bộ pipeline.
Chuẩn bị dữ liệu kiểm thử QA
Kỹ sư QA tạo test fixture dưới dạng JSON, nhưng nhiều framework kiểm thử và công cụ kiểm thử theo dữ liệu chấp nhận CSV cho đầu vào kiểm thử tham số hóa. Chuyển đổi fixture sang CSV mà không cần định dạng lại thủ công.
Phân tích log và báo cáo
Log JSON có cấu trúc từ ứng dụng và dịch vụ đám mây có thể được chuyển đổi sang CSV để nhập vào các công cụ BI như Tableau, Power BI hoặc Looker để trực quan hóa và báo cáo.
Xử lý dữ liệu học thuật
Sinh viên và nhà nghiên cứu làm việc với API dữ liệu mở nhận phản hồi JSON. Chuyển đổi sang CSV cho phép phân tích trong R, pandas, SPSS hoặc Excel mà không cần viết mã phân tích cú pháp.

Tham chiếu dấu phân cách CSV

Ký tự dấu phân cách tách các trường trong mỗi hàng. Dấu phẩy là phổ biến nhất, nhưng các dấu phân cách khác là tiêu chuẩn trong các ngữ cảnh cụ thể. Chọn sai dấu phân cách khiến các trường bị gộp hoặc tách sai khi mở file.

TênKý tựPhần mở rộngKhi nào dùng
Comma,.csvDefault for most spreadsheets and databases
Semicolon;.csvStandard in locales where comma is a decimal separator (DE, FR, BR)
Tab\t.tsvAvoids escaping when field values contain commas or semicolons
Pipe|.csvUsed in fixed-width legacy systems and some ETL pipelines

Xử lý JSON lồng nhau trong CSV

CSV là định dạng phẳng, không có cách biểu diễn trực tiếp các đối tượng hoặc mảng lồng nhau. Khi JSON chứa các cấu trúc lồng nhau, bộ chuyển đổi phải làm phẳng chúng thành các cột. Có nhiều chiến lược khác nhau, và lựa chọn phù hợp phụ thuộc vào cách CSV sẽ được sử dụng.

Làm phẳng theo ký hiệu dấu chấm
Các key lồng nhau được nối bằng dấu chấm: {"address": {"city": "Hà Nội"}} trở thành cột tên address.city với giá trị Hà Nội. Đây là cách phổ biến nhất và hoạt động tốt với các công cụ hỗ trợ tham chiếu trường lồng nhau.
Cột theo chỉ số mảng
Mảng được mở rộng thành các cột đánh số: {"tags": ["a", "b"]} trở thành tags.0 = a, tags.1 = b. Cách này bảo toàn tất cả giá trị nhưng tạo nhiều cột khi mảng lớn.
Dự phòng chuỗi JSON
Các giá trị lồng nhau phức tạp được tuần tự hóa thành chuỗi JSON trong ô CSV: ô chứa văn bản JSON thô. Cách này bảo toàn toàn bộ cấu trúc nhưng yêu cầu người dùng phân tích giá trị ô.
Bỏ qua các trường lồng nhau
Một số bộ chuyển đổi loại bỏ hoàn toàn các đối tượng và mảng lồng nhau, chỉ giữ các trường vô hướng (chuỗi, số, boolean, null). Cách này tạo ra CSV sạch nhưng mất dữ liệu. Chỉ hữu ích khi bạn biết các trường lồng nhau không cần thiết.

Ví dụ mã nguồn

Chuyển đổi JSON sang CSV theo lập trình cần xử lý trích xuất tiêu đề, trích dẫn trường và thoát dấu phân cách. Hầu hết các ngôn ngữ đều có hỗ trợ tích hợp sẵn hoặc trong thư viện chuẩn để ghi CSV.

JavaScript (Node.js)
const data = [
  { name: "Alice", age: 30, city: "Berlin" },
  { name: "Bob", age: 25, city: "Tokyo" },
]

// Extract headers from the first object
const headers = Object.keys(data[0])
const csv = [
  headers.join(","),
  ...data.map(row => headers.map(h => {
    const val = String(row[h] ?? "")
    // Quote fields that contain commas, quotes, or newlines
    return val.includes(",") || val.includes('"') || val.includes("\n")
      ? '"' + val.replace(/"/g, '""') + '"'
      : val
  }).join(","))
].join("\n")

console.log(csv)
// → name,age,city
// → Alice,30,Berlin
// → Bob,25,Tokyo
Python
import json, csv, io

json_str = '[{"name":"Alice","age":30,"city":"Berlin"},{"name":"Bob","age":25,"city":"Tokyo"}]'
data = json.loads(json_str)

output = io.StringIO()
writer = csv.DictWriter(output, fieldnames=data[0].keys())
writer.writeheader()
writer.writerows(data)

print(output.getvalue())
# → name,age,city
# → Alice,30,Berlin
# → Bob,25,Tokyo
CLI (jq + Miller)
# Using jq to convert JSON array to CSV
echo '[{"name":"Alice","age":30},{"name":"Bob","age":25}]' | \
  jq -r '(.[0] | keys_unsorted) as $k | $k, (.[] | [.[$k[]]] ) | @csv'
# → "name","age"
# → "Alice",30
# → "Bob",25

# Using Miller (mlr) for streaming conversion
echo '[{"name":"Alice","age":30}]' | mlr --json --ocsv cat
# → name,age
# → Alice,30
Go
package main

import (
    "encoding/csv"
    "encoding/json"
    "fmt"
    "os"
)

func main() {
    jsonStr := `[{"name":"Alice","age":30},{"name":"Bob","age":25}]`
    var data []map[string]interface{}
    json.Unmarshal([]byte(jsonStr), &data)

    w := csv.NewWriter(os.Stdout)
    // Write header
    headers := []string{"name", "age"}
    w.Write(headers)
    // Write rows
    for _, row := range data {
        record := make([]string, len(headers))
        for i, h := range headers {
            record[i] = fmt.Sprintf("%v", row[h])
        }
        w.Write(record)
    }
    w.Flush()
    // → name,age
    // → Alice,30
    // → Bob,25
}

Câu hỏi thường gặp

Công cụ này mong đợi cấu trúc JSON như thế nào?
Công cụ mong đợi một mảng JSON các đối tượng, ví dụ [{"name":"An"},{"name":"Bình"}]'. Mỗi đối tượng trong mảng trở thành một hàng trong đầu ra, và các key của đối tượng trở thành tiêu đề cột. Một đối tượng JSON đơn (không bọc trong mảng) được coi là bảng một hàng.
Các đối tượng và mảng lồng nhau được xử lý như thế nào?
Các giá trị lồng nhau được làm phẳng bằng ký hiệu dấu chấm. Ví dụ, {"address":{"city":"Hà Nội"}'} tạo ra cột tên address.city. Mảng được mở rộng thành các cột có chỉ số (tags.0, tags.1). Cách này bảo toàn dữ liệu trong khi giữ đầu ra phẳng.
Điều gì xảy ra khi các đối tượng có key khác nhau?
Bộ chuyển đổi thu thập tất cả key duy nhất trên tất cả đối tượng trong mảng và dùng chúng làm tiêu đề cột. Đối tượng thiếu một key sẽ có ô trống cho cột đó. Không mất dữ liệu, và thứ tự cột theo thứ tự key xuất hiện đầu tiên.
Tôi có thể dùng 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, chấm phẩy, tab và pipe làm dấu phân cách. Dùng chấm phẩy khi dữ liệu hoặc locale của bạn dùng dấu phẩy làm dấu thập phân (phổ biến trong bảng tính tiếng Đức, Pháp và Brazil). Dùng tab cho file TSV được sử dụng bởi các công cụ Unix.
Quá trình chuyển đổi có mất dữ liệu không?
Với mảng JSON phẳng có giá trị vô hướng nhất quán, không mất dữ liệu. File đầu ra chứa cùng dữ liệu và có thể chuyển đổi ngược lại thành JSON giống hệt. Với các cấu trúc lồng nhau, việc làm phẳng thay đổi hình dạng dữ liệu. Các giá trị mảng được tuần tự hóa thành cột có chỉ số hoặc chuỗi JSON có thể được tái tạo, nhưng quá trình chuyển đổi ngược yêu cầu biết cấu trúc gốc.
Tôi có thể chuyển đổi file JSON lớn bao nhiêu?
Công cụ chạy trong trình duyệt và xử lý dữ liệu trong bộ nhớ — các file lên đến 10–20 MB chuyển đổi không có vấn đề trên các thiết bị hiện đại. Với file lớn hơn, hãy dùng công cụ CLI như jq, Miller hoặc script Python với module csv, xử lý dữ liệu dạng luồng.
Có an toàn khi dán dữ liệu nhạy cảm vào công cụ này không?
Có. Toàn bộ quá trình xử lý diễn ra trong trình duyệt bằng JavaScript. Không có dữ liệu nào được gửi lên server. Bạn có thể xác minh điều này bằng cách mở công cụ dành cho nhà phát triển của trình duyệt và kiểm tra tab Network trong quá trình chuyển đổi.