JSON sang TOML
Đây là công cụ miễn phí giúp chuyển nhanh đối tượng JSON thành file cấu hình TOML v1.0. Công cụ tự động tạo bảng lồng nhau ([section]), bảng con ([a.b]) và mảng bảng ([[items]]), rất tiện khi chuẩn bị Cargo.toml hoặc pyproject.toml. Toàn bộ quá trình chuyển đổi được xử lý cục bộ ngay trong trình duyệt.
Đề xuất Liên quan
TOML là gì? Tại sao phải chuyển JSON sang TOML?
TOML là viết tắt của Tom's Obvious, Minimal Language (Ngôn ngữ tối thiểu rõ ràng của Tom), là định dạng tệp cấu hình được Tom Preston-Werner, đồng sáng lập GitHub, phát hành vào năm 2013. Mục tiêu thiết kế của nó là: cú pháp rõ ràng (obvious), tối giản (minimal), dễ đọc cho con người, rõ ràng không mơ hồ. TOML 1.0 đã trở thành phiên bản ổn định vào năm 2021 (toml-lang/toml), hiện đã trở thành định dạng cấu hình mặc định cho Cargo của hệ sinh thái Rust, PEP 621 (pyproject.toml) của Python, Hugo, Prettier, Deno, Taplo và nhiều công cụ khác.
So với JSON và YAML trong các tình huống tệp cấu hình, TOML có một số ưu điểm rõ ràng: ① Không có bẫy thụt đầu dòng của YAML — YAML dùng thụt đầu dòng để biểu diễn cấp bậc, lỗi thụt đầu dòng sẽ làm thay đổi hoàn toàn ý nghĩa cấu hình (ví dụ list biến thành string), TOML dùng [table] khai báo tường minh cấp bậc, không có sự mơ hồ; ② Phù hợp cấu hình hơn JSON — dấu nháy, ngoặc nhọn của JSON rất cồng kềnh trong cấu hình phức tạp, cách viết key = value của TOML gọn gàng hơn, hỗ trợ chú thích gốc; ③ Hệ thống kiểu rõ ràng — TOML phân biệt bảy kiểu integer/float/string/boolean/datetime/array/table, không có sự mơ hồ "con số là số nguyên hay số thực" của JSON, cũng không có vấn đề Na Uy của YAML 1.1 (NO được phân tích thành boolean false).
Cấu trúc cốt lõi của TOML gồm bốn thành phần: ① Cặp khóa-giá trị (key = value) biểu diễn mục cấu hình cơ bản; ② Bảng (Table) dùng [name] biểu diễn nhóm đã đặt tên, hỗ trợ lồng nhau ([a.b.c]); ③ Mảng bảng (Array of Tables) dùng [[name]] biểu diễn danh sách đối tượng đồng nhất, thường dùng cho cấu hình đa môi trường, danh sách plugin, danh sách phụ thuộc; ④ Mảng (Array) hỗ trợ kiểu cơ bản nội tuyến ([1, 2, 3]) và hai cách viết nhiều dòng. Công cụ này sẽ nhận diện thông minh cấu trúc JSON khi chuyển đổi, tự động chọn cú pháp TOML phù hợp nhất.
Các động lực phổ biến để chuyển JSON sang TOML gồm: ① Dự án di chuyển từ hệ sinh thái Node.js sang hệ sinh thái Rust/Python mới, định dạng cấu hình cần thống nhất thành TOML; ② Nhóm quyết định thống nhất quản lý cấu hình JSON rải rác vào TOML, tận dụng cấp bậc [section] của TOML để tránh gánh nặng đọc do lồng sâu của JSON; ③ Dùng TOML thay YAML để loại bỏ các lỗi kỳ lạ do thụt đầu dòng; ④ Trong CI/CD chuyển siêu dữ liệu JSON do thượng nguồn gửi xuống thành TOML để đưa vào công cụ hạ nguồn. Công cụ này đáp ứng nhu cầu chuyển đổi của tất cả các tình huống này.
Bản chất của quá trình chuyển đổi là ánh xạ cây cú pháp: JSON.parse() phân tích văn bản thành đối tượng JavaScript (AST), sau đó duyệt đệ quy từng nút — chuỗi, số, boolean, null ánh xạ thành vô hướng TOML tương ứng; mảng tùy kiểu phần tử được chia thành mảng nội tuyến hoặc mảng bảng; đối tượng lồng nhau ánh xạ thành bảng hoặc bảng con. Cuối cùng xuất văn bản theo đặc tả TOML. Ánh xạ có cấu trúc này đảm bảo kết quả chuyển đổi hợp lệ 100% về mặt cú pháp, không xuất hiện lỗi định dạng.
Trường hợp sử dụng
- Khi bạn muốn tạo nhanh bản nháp Cargo.toml cho dự án Rust
- Khi cần chuyển thiết lập dự án Python sang pyproject.toml
- Khi muốn đổi cấu hình Hugo, Deno hoặc Prettier từ JSON sang TOML
- Khi nhóm cần chuẩn hóa cấu hình CI/CD hoặc DevOps theo TOML
- Khi cần so sánh JSON hiện tại với TOML để chọn định dạng dễ đọc hơn
- Khi học cú pháp TOML qua ví dụ thực tế về bảng lồng nhau và mảng bảng
Cách Sử dụng
- Dán JSON vào trình soạn thảo bên trái hoặc tải lên tệp .json / .txt. Nếu muốn, bạn có thể mở ví dụ mẫu
- Công cụ sẽ phân tích dữ liệu và sinh TOML v1.0 ngay ở khung bên phải theo thời gian thực
- Nếu có lỗi cú pháp, hãy xem thông báo và sửa JSON trước khi chuyển lại
- Sao chép kết quả hoặc tải xuống dưới dạng config.toml để dùng cho dự án
Tính năng
- Tạo đầu ra đúng chuẩn TOML v1.0 để dùng trực tiếp với Cargo, Poetry, Hugo, Prettier và các công cụ hỗ trợ TOML khác
- Tự động ánh xạ JSON nhiều tầng thành các bảng TOML như [a] và [a.b.c], giúp cấu trúc dễ đọc hơn
- Chuyển mảng đối tượng thành mảng bảng [[items]], phù hợp cho danh sách host, dependency hoặc nhiều môi trường
- Escape dấu ngoặc kép, dấu gạch chéo ngược, xuống dòng và tab theo đúng quy tắc TOML
- Tự động ánh xạ chuỗi, số, boolean và null sang kiểu TOML phù hợp; null sẽ thành chuỗi rỗng ""
- Dán JSON ở khung bên trái là có thể xem kết quả TOML ngay ở khung bên phải
- Có sẵn ví dụ đầy đủ với đối tượng lồng nhau, mảng và mảng bảng để thử nhanh
- Hỗ trợ tải tệp .json / .txt và tải kết quả xuống dưới dạng config.toml
- Trên máy tính bạn có thể kéo thay đổi độ rộng hai panel, đồng thời hệ thống tự lưu 200 lịch sử gần nhất
- Sau khi chuyển đổi, bạn có thể mở tiếp công cụ định dạng JSON để kiểm tra và làm sạch dữ liệu nguồn
- Mọi xử lý đều diễn ra cục bộ trong JavaScript của trình duyệt, không gửi cấu hình nhạy cảm lên máy chủ
Câu hỏi Thường gặp
Làm thế nào để chuyển JSON thành tệp cấu hình TOML?
Dán nội dung JSON vào ô nhập bên trái, công cụ sẽ tự động phân tích đối tượng JSON và chuyển đổi theo đặc tả TOML v1.0. Cặp khóa-giá trị trở thành key = value, đối tượng lồng nhau trở thành bảng TOML ([section]) và bảng con ([a.b]), mảng được tự động phân thành mảng nội tuyến hoặc mảng bảng ([[items]]) tùy nội dung. Nhấn nút ví dụ để tải mẫu lồng nhau và xem hiệu quả, kết quả chuyển đổi có thể tải xuống trực tiếp thành tệp config.toml để dùng cho cấu hình dự án.
TOML, YAML và JSON phù hợp với những tình huống nào?
JSON phù hợp với trao đổi dữ liệu API và truyền dữ liệu giữa frontend và backend, là tiêu chuẩn thực tế của giao diện REST; YAML phù hợp với cấu trúc dữ liệu phức tạp và cấu hình CI/CD (GitHub Actions, Ansible, Kubernetes), khả năng đọc cao, hỗ trợ chú thích và nhiều tài liệu; TOML phù hợp với các tình huống cấu hình rõ ràng (Rust/Cargo, Python pyproject, Hugo, Prettier), cú pháp ngắn gọn, ít mơ hồ, không có bẫy thụt đầu dòng. Không có ưu nhược tuyệt đối giữa ba định dạng, điểm mấu chốt là phù hợp tình huống — tệp cấu hình khuyến nghị TOML, cấu hình CI/CD khuyến nghị YAML, dữ liệu API dùng JSON.
Đối tượng JSON lồng nhau được biểu diễn trong TOML như thế nào?
TOML dùng bảng (Table) để biểu diễn cấu trúc lồng nhau. Lồng một cấp như {"database": {"host": "localhost"}} chuyển thành [database] host = "localhost"; lồng nhiều cấp như {"server": {"ssl": {"enabled": true}}} chuyển thành [server.ssl] enabled = true. Công cụ này tự động nhận diện cấp lồng và tạo đường dẫn tiêu đề bảng tương ứng, không cần điều chỉnh thủ công.
Mảng JSON được chuyển đổi trong TOML như thế nào?
TOML phân biệt hai cú pháp mảng: ① mảng kiểu cơ bản (như ["a", "b", 1, 2]) chuyển thành mảng nội tuyến key = ["a", "b", 1, 2], bọc trong ngoặc vuông và phân cách bằng dấu phẩy; ② mảng đối tượng (như [{"name": "primary"}, {"name": "replica"}]) chuyển thành mảng bảng [[items]], mỗi đối tượng thêm tiêu đề [[items]] ở trên, các trường được trải phẳng bên dưới. Công cụ này tự động xác định kiểu mảng để chọn cú pháp TOML phù hợp nhất.
TOML được tạo có thể dùng trực tiếp cho Cargo.toml không?
Được. Công cụ tuân thủ nghiêm ngặt đặc tả chính thức TOML v1.0 (github.com/toml-lang/toml), TOML đầu ra có thể dùng trực tiếp cho Cargo (quản lý gói Rust), Poetry/pyproject (quản lý gói Python), Hugo (trang tĩnh), Prettier, Deno, Taplo và mọi công cụ hỗ trợ định dạng TOML. Lưu ý: nếu bạn cần đoạn [package] / [dependencies] cụ thể của Cargo.toml, hãy bổ sung các trường tương ứng theo đặc tả Cargo (name, version, edition, bảng phụ thuộc crate, v.v.).
Giá trị null trong JSON sẽ được chuyển thành gì?
TOML không có kiểu null, vì vậy null của JSON sẽ được chuyển thành một chuỗi rỗng "" (cách biểu diễn tương đương phổ biến nhất). Nếu bộ tiêu thụ TOML của bạn có yêu cầu đặc biệt đối với trường null (ví dụ trường optional của một crate trong [dependencies]), hãy điều chỉnh thủ công dòng tương ứng sau khi chuyển đổi.
Dấu nháy kép và xuống dòng trong chuỗi được xử lý như thế nào?
Chuỗi TOML phải được bao bọc bằng dấu nháy kép, dấu nháy kép, dấu gạch chéo ngược, ký tự xuống dòng (\n), ký tự về đầu dòng (\r), ký tự tab (\t) bên trong đều phải được escape theo quy tắc TOML. Công cụ này tự động xử lý các escape này, ví dụ He said "Hello" trong JSON sau khi chuyển sang TOML sẽ trở thành He said \"Hello\", xuống dòng trong chuỗi nhiều dòng sẽ trở thành \n. Không cần escape thủ công, đầu ra của công cụ có thể được trình phân tích TOML đọc chính xác.
TOML được tạo có hỗ trợ kiểu ngày giờ không?
Công cụ này chỉ nhận văn bản JSON làm đầu vào, mà chuẩn JSON không có kiểu ngày giờ gốc (cách làm phổ biến là chuỗi ISO 8601, ví dụ "2026-01-01T00:00:00Z"). TOML sau khi chuyển đổi sẽ giữ các giá trị này dưới dạng chuỗi (key = "2026-01-01T00:00:00Z"). Nếu bạn cần kiểu local datetime/offset datetime gốc của TOML, hãy đổi thủ công chuỗi thành chuỗi ngày TOML thuần (ví dụ 2026-01-01T00:00:00).
Chuyển đổi trong trình duyệt cục bộ, dữ liệu cấu hình có được tải lên không?
Không. Mọi quá trình phân tích JSON, tạo TOML, escape chuỗi đều hoàn tất trong công cụ JavaScript cục bộ của trình duyệt bạn, không gửi qua mạng đến bất kỳ máy chủ nào, ngắt mạng vẫn sử dụng bình thường. JSON chứa mật khẩu cơ sở dữ liệu, khóa API, địa chỉ nội bộ và các thông tin cấu hình nhạy cảm khác có thể yên tâm chuyển đổi.
Xử lý sự cố
Lỗi JSON "Unexpected token" phải giải quyết thế nào?
Đây là lỗi cú pháp JSON. Nguyên nhân phổ biến: ① Dấu phẩy thừa ở cuối (trailing comma), ví dụ {"a":1,}; ② Dùng dấu nháy đơn bọc chuỗi, ví dụ {'a':1} (JSON phải dùng dấu nháy kép); ③ Tên khóa không có dấu nháy kép, ví dụ {a:1}; ④ Chú thích // hoặc /* */ (chuẩn JSON không hỗ trợ). Có thể dùng công cụ sửa JSON trên trang để tự động sửa các lỗi phổ biến này, sau khi sửa hãy dán lại vào công cụ này để chuyển đổi.
TOML sau khi chuyển đổi báo lỗi "invalid TOML" trong Cargo?
Thường là xung đột tên trường hoặc thiếu trường bắt buộc. Trình phân tích TOML rất nghiêm ngặt với đường dẫn tiêu đề bảng, tên khóa trùng lặp, escape ký tự. Vui lòng kiểm tra: ① Có tên khóa trùng lặp trong cùng phạm vi không; ② Ký tự đặc biệt trong chuỗi đã được escape đúng chưa (dấu nháy kép, dấu gạch chéo ngược, xuống dòng); ③ Cấp lồng có quá sâu không (TOML 1.0 khuyến nghị không quá 5 cấp); ④ Có thiếu đoạn bắt buộc của Cargo như [package] không. Cú pháp đầu ra của công cụ hợp lệ 100%, vấn đề thường nằm ở phía sử dụng (ví dụ tên trường có tuân thủ đặc tả Cargo không).
Mảng đối tượng được chuyển thành mảng nội tuyến thay vì mảng bảng?
Mảng JSON chỉ được chuyển thành mảng nội tuyến ["a","b"] khi tất cả phần tử là kiểu cơ bản (chuỗi/số/boolean/null), mảng đối tượng (như [{"name":"x"}]) sẽ được chuyển thành mảng bảng [[items]]. Nếu mảng đối tượng của bạn bị nhận diện nhầm thành mảng nội tuyến, nghĩa là mảng có lẫn phần tử không phải đối tượng. Vui lòng kiểm tra dữ liệu: ① Có lẫn chuỗi hoặc số trong mảng không; ② Cấp lồng có bị phá vỡ không.
Một số tên khóa sau khi chuyển đổi có thêm dấu nháy, làm sao để bỏ?
TOML quy định tên khóa chỉ được chứa chữ cái, chữ số, dấu gạch dưới và dấu gạch ngang ([A-Za-z0-9_-]). Nếu tên khóa JSON chứa ký tự đặc biệt (như dấu cách, dấu chấm, tiếng Trung, emoji, từ khóa dành riêng), công cụ sẽ tự động bọc bằng dấu nháy kép để đảm bảo TOML hợp lệ, ví dụ {"my key": 1} sẽ chuyển thành "my key" = 1. Nếu công cụ hạ nguồn của bạn không chấp nhận tên khóa có dấu nháy, vui lòng đổi thủ công tên khóa JSON thành ký tự hợp lệ (A-Z a-z 0-9 _ -) rồi chuyển đổi lại.
Tệp lớn chuyển đổi bị trình duyệt giật, phải làm sao?
Công cụ đã tối ưu chuyển đổi thời gian thực (nhập là chuyển đổi), nhưng tệp quá lớn (>1MB, hàng trăm nghìn dòng) vẫn có thể chịu áp lực. Khuyến nghị: ① Trước tiên dùng công cụ định dạng JSON kiểm tra JSON có hợp lệ không; ② Chuyển đổi theo lô (ví dụ tách theo khóa cấp cao nhất); ③ Xác nhận trình duyệt có đủ bộ nhớ; ④ Tệp cấu hình cực lớn (10MB+) khuyến nghị dùng công cụ dòng lệnh như taplo, tomlq, công cụ này định vị cho tình huống cấu hình hàng ngày (KB đến vài trăm KB).
Thuật ngữ
- TOML
- Tom's Obvious, Minimal Language, một ngôn ngữ định dạng thiết kế cho tệp cấu hình, cú pháp ngắn gọn không mơ hồ, là định dạng cấu hình mặc định của Rust Cargo / Python pyproject / Hugo.
- Bảng (Table)
- Nhóm đã đặt tên được khai báo bằng [name] trong TOML, tương đương với đối tượng trong JSON, hỗ trợ lồng nhau bằng dấu chấm như [server.ssl].
- Mảng bảng (Array of Tables)
- Danh sách đối tượng đồng nhất được khai báo bằng [[name]] trong TOML, mỗi đoạn [[name]] chứa toàn bộ trường của một đối tượng, tương đương với mảng đối tượng trong JSON.
- Bảng nội tuyến (Inline Table)
- Cú pháp được hỗ trợ bởi TOML 1.0, dùng { key = value, key = value } để khai báo đối tượng đơn giản trong một dòng, phù hợp với đối tượng phẳng không cần đặt tên.
- Cargo.toml
- Tệp cấu hình chuẩn của dự án Rust, định nghĩa siêu dữ liệu package, dependencies, dev-dependencies, features, v.v., định dạng TOML.
- pyproject.toml
- Tệp cấu hình chuẩn của dự án Python (PEP 621), định nghĩa build-system, siêu dữ liệu project, dependencies, cấu hình tool (black/pytest/mypy, v.v.).
- TOML v1.0
- TOML 1.0 là phiên bản ổn định được phát hành chính thức vào năm 2021, công cụ này tuân thủ nghiêm ngặt đặc tả này (github.com/toml-lang/toml/blob/main/toml.md).
- Đối tượng lồng nhau JSON
- Đối tượng chứa các đối tượng khác trong JSON, tương ứng với Bảng ([section]) hoặc bảng con ([a.b.c]) của TOML.
- Escape TOML
- Dấu nháy kép, dấu gạch chéo ngược, xuống dòng và các ký tự đặc biệt khác trong chuỗi TOML phải được escape bằng dấu gạch chéo ngược (\", \\, \n), công cụ này tự động xử lý.
- Tệp cấu hình (Config File)
- Tệp cài đặt được ứng dụng đọc khi khởi động, tách khỏi mã nguồn để thuận tiện cho việc sửa đổi. TOML là một trong những tiêu chuẩn thực tế cho tệp cấu hình.
Bảng ánh xạ kiểu JSON sang TOML
Công cụ này chuyển đổi kiểu JSON sang kiểu TOML theo các quy tắc sau:
| Kiểu JSON | Kiểu TOML | Cú pháp TOML | Ghi chú |
|---|---|---|---|
| string | string | key = "value" | Chuỗi TOML phải bọc trong dấu nháy kép |
| integer | integer | key = 8080 | Số nguyên không có dấu thập phân |
| float | float | key = 3.14 | Số thực phải có dấu thập phân |
| boolean | boolean | key = true | TOML chỉ dùng true / false viết thường |
| null | string (rỗng) | key = "" | TOML không có kiểu null, chuyển thành chuỗi rỗng |
| array[primitive] | array | key = ["a", "b"] | Mảng kiểu cơ bản dùng ngoặc vuông nội tuyến |
| array[object] | array of tables | [[items]]
key = value | Mảng đối tượng dùng mảng bảng [[name]] |
| object | table | [name]
key = value | Đối tượng dùng khai báo bảng [name] |
Bảng đối chiếu escape chuỗi TOML
Các ký tự đặc biệt phải escape trong chuỗi TOML:
| Ký tự gốc | Sau escape TOML | Tên | Ví dụ tình huống |
|---|---|---|---|
" | \" | Dấu nháy kép | Dấu nháy kép lồng trong chuỗi |
\ | \\ | Dấu gạch chéo ngược | Đường dẫn Windows C:\Users |
Xuống dòng | \n | Newline | Nén chuỗi nhiều dòng |
Tab | \t | Tab | Trường ký tự tab |
Về đầu dòng | \r | Carriage Return | Xuống dòng CRLF của Windows |
| \b | Backspace | Ký tự xóa lùi |
| \f | Form Feed | Ký tự sang trang |
U+0000 | \u0000 | Unicode 0 | Ký tự điều khiển phải dùng \u để escape |
Đối chiếu ví dụ JSON sang TOML
TOML đầu ra tương ứng với JSON đầu vào có cấu trúc phức tạp:
| Cấu trúc | Ví dụ |
|---|---|
| JSON đầu vào | { "name": "app", "port": 8080 } |
| TOML đầu ra | name = "app"
port = 8080 |
| JSON đầu vào | { "server": { "host": "0.0.0.0", "port": 443 } } |
| TOML đầu ra | [server]
host = "0.0.0.0"
port = 443 |
| JSON đầu vào | { "hosts": [{"ip":"10.0.0.1"},{"ip":"10.0.0.2"}] } |
| TOML đầu ra | [[hosts]]
ip = "10.0.0.1"
[[hosts]]
ip = "10.0.0.2" |
Privacy & Security
Việc phân tích JSON, tạo TOML, escape chuỗi và đọc tệp đều được thực hiện cục bộ bằng JavaScript trong trình duyệt của bạn. JSON đầu vào và TOML đầu ra không được gửi lên máy chủ hay lưu lại để phân tích. Vì vậy bạn có thể dùng công cụ này cho cả dữ liệu cấu hình nhạy cảm như mật khẩu cơ sở dữ liệu, API key hoặc địa chỉ mạng nội bộ. Lịch sử cục bộ chỉ nằm trong localStorage của trình duyệt và sẽ biến mất khi bạn xóa bộ nhớ đệm.
Authoritative References
- toml-langĐặc tả chính thức TOML v1.0
- GitHubKho lưu trữ GitHub TOML
- WikipediaTOML - Wikipedia
- Rust chính thứcTham chiếu trường Cargo.toml
- Nén JSON
- CSV sang JSON
- JSON sang CSV
- JSON Diff
- JSON Escape / Unescape
- Làm phẳng JSON
- Trình định dạng JSON
- Trinh tao JSON
- Truy vấn JSONPath
- Gộp JSON
- Sửa JSON
- Trình Xác Thực JSON Schema
- Sắp xếp JSON
- JSON Stringify
- JSON sang HTML
- JSON sang Java
- JSON sang Markdown
- JSON sang SQL
- JSON sang TOML
- JSON sang TypeScript
- XML sang JSON
- Chuyen JSON sang XML
- YAML sang JSON
- JSON → YAML
- JSON sang Go
- JSON sang Rust
- JSON sang Swift
- JSON sang C#
- JSON sang C++
- JSON sang PHP
- JSON sang Python