TOML (Tom's Obvious Minimal Language) là định dạng tệp cấu hình được thiết kế cho con người. Nó ánh xạ rõ ràng sang bảng băm, hỗ trợ bảng lồng nhau, giá trị có kiểu dữ liệu và chú thích nội tuyến. Nhiều công cụ và framework sử dụng TOML làm định dạng cấu hình chính: các dự án Rust dựa vào Cargo.toml, Python packaging dùng pyproject.toml, và các trang tĩnh Hugo cấu hình qua config.toml. Chuyển đổi TOML sang JSON trực tuyến cho phép bạn biến đổi các tệp cấu hình này sang định dạng mà hầu hết mọi ngôn ngữ lập trình, API và data pipeline đều có thể xử lý trực tiếp.
JSON (JavaScript Object Notation), được định nghĩa bởi RFC 8259, là định dạng trao đổi dữ liệu được hỗ trợ rộng rãi nhất. Trong khi TOML ưu tiên khả năng đọc của con người với cú pháp tối giản và hỗ trợ chú thích, JSON ưu tiên khả năng tương tác giữa các máy. Công cụ chuyển đổi TOML sang JSON thu hẹp khoảng cách này bằng cách phân tích cú pháp đầu vào TOML theo đặc tả TOML v1.0.0 và tạo ra tài liệu JSON tương đương về mặt cấu trúc. Quá trình chuyển đổi giữ nguyên toàn bộ dữ liệu: chuỗi, số nguyên, số thực, boolean, mảng và bảng đều ánh xạ trực tiếp sang các kiểu tương ứng trong JSON.
TOML có bốn kiểu ngày/giờ gốc mà JSON không thể biểu diễn trực tiếp: offset date-time, local date-time, local date và local time. JSON không có kiểu ngày, vì vậy các giá trị này được tuần tự hóa thành chuỗi ISO 8601 trong quá trình chuyển đổi.
Tại sao nên dùng công cụ chuyển đổi TOML sang JSON?
Các tệp cấu hình viết bằng TOML thường cần được đưa vào các hệ thống chỉ chấp nhận JSON. Thay vì viết lại tệp thủ công hoặc cài đặt thư viện parser cục bộ, công cụ chuyển đổi trên trình duyệt xử lý việc này chỉ trong vài giây.
🔒
Xử lý ưu tiên quyền riêng tư
Dữ liệu TOML của bạn được phân tích và chuyển đổi hoàn toàn trên trình duyệt. Không có dữ liệu nào được tải lên máy chủ, giúp bạn an toàn khi chuyển đổi các tệp cấu hình chứa API key, thông tin xác thực cơ sở dữ liệu hoặc tên máy chủ nội bộ.
⚡
Chuyển đổi tức thì
Dán TOML vào và nhận kết quả JSON được định dạng ngay lập tức. Không cần cài đặt các gói Node.js, thư viện Python hay công cụ CLI chỉ để thực hiện một lần chuyển đổi định dạng.
🔀
Hỗ trợ đầy đủ TOML v1.0.0
Công cụ xử lý tất cả các kiểu dữ liệu TOML bao gồm dotted key, inline table, mảng bảng, chuỗi nhiều dòng và giá trị ngày/giờ. Các trường hợp đặc biệt dễ gây lỗi khi chuyển đổi thủ công đều được xử lý chính xác.
📋
Không cần tài khoản
Mở trang, dán TOML và sao chép kết quả JSON. Không cần đăng ký, không giới hạn tần suất và không theo dõi việc sử dụng. Công cụ hoạt động nhất quán mỗi lần bạn truy cập.
Các trường hợp sử dụng TOML sang JSON
Phát triển Frontend
Chuyển đổi metadata Cargo.toml của dự án Rust WASM sang JSON để script build JavaScript hoặc bước tạo package.json sử dụng.
Kỹ thuật Backend
Biến đổi cấu hình ứng dụng viết bằng TOML thành JSON để đưa vào các môi trường yêu cầu cấu hình JSON, chẳng hạn như biến môi trường AWS Lambda hoặc nhãn container Docker.
DevOps và CI/CD
Các công cụ pipeline như GitHub Actions và GitLab CI thường làm việc với đầu vào JSON. Chuyển đổi cấu hình công cụ dạng TOML (rustfmt.toml, taplo.toml) sang JSON cho các bước linting hoặc validation.
QA và Kiểm thử
Tạo test fixture JSON từ các tệp nguồn TOML. TOML dễ bảo trì hơn như một nguồn dữ liệu kiểm thử nhờ hỗ trợ chú thích và cú pháp dễ đọc, nhưng các test harness thường mong đợi đầu vào JSON.
Kỹ thuật Dữ liệu
Khi di chuyển cấu hình giữa các hệ thống, các tệp TOML từ một nền tảng (ví dụ: InfluxDB, Telegraf) có thể cần trở thành tài liệu JSON cho API hoặc công cụ nhập của nền tảng khác.
Học tập và Giáo dục
Sinh viên học về định dạng dữ liệu có thể dán các ví dụ TOML và xem chính xác cách bảng trở thành đối tượng lồng nhau, cách mảng bảng trở thành mảng JSON và cách kiểu ngày của TOML ánh xạ thành chuỗi.
Tham chiếu ánh xạ kiểu dữ liệu TOML sang JSON
Mỗi kiểu TOML đều có một kiểu JSON tương đương trực tiếp, với một ngoại lệ: giá trị ngày và giờ. Bảng dưới đây cho thấy cách mỗi kiểu TOML chuyển đổi sang JSON. Ánh xạ này tuân theo đặc tả TOML v1.0.0 và khớp với hành vi của các parser tiêu chuẩn như tomllib (Python), toml-rs (Rust) và @iarna/toml (Node.js).
Kiểu
Cú pháp TOML
Đầu ra JSON
String
"value"
"value"
Integer
42
42
Float
3.14
3.14
Boolean
true / false
true / false
Offset Date-Time
1979-05-27T07:32:00Z
"1979-05-27T07:32:00Z"
Local Date-Time
1979-05-27T07:32:00
"1979-05-27T07:32:00"
Local Date
1979-05-27
"1979-05-27"
Local Time
07:32:00
"07:32:00"
Array
[1, 2, 3]
[1, 2, 3]
Table
[section]
{ "section": {} }
Inline Table
{ key = "val" }
{ "key": "val" }
Array of Tables
[[items]]
"items": [{}]
Số nguyên TOML hỗ trợ dấu gạch dưới để dễ đọc (ví dụ: 1_000_000) và các ký tự hexadecimal (0xDEADBEEF), octal (0o755) và binary (0b11010110). Tất cả những giá trị này được chuyển đổi thành số thập phân thông thường trong JSON. TOML cũng hỗ trợ giá trị float infinity và NaN, nhưng những giá trị này không có biểu diễn trong JSON và sẽ gây ra lỗi chuyển đổi ở chế độ strict.
Ví dụ mã nguồn
Các ví dụ thực tế về chuyển đổi TOML sang JSON bằng bốn ngôn ngữ. Mỗi ví dụ đọc tệp TOML, phân tích cú pháp và xuất JSON được định dạng.
import tomllib # Python 3.11+ (standard library)
import json
with open('config.toml', 'rb') as f:
data = tomllib.load(f)
print(json.dumps(data, indent=2, default=str))
# Dates become strings: "1979-05-27"
# Arrays of tables become JSON arrays of objects
Go
package main
import (
"encoding/json"
"fmt"
"os"
"github.com/BurntSushi/toml"
)
func main() {
var data map[string]any
_, err := toml.DecodeFile("config.toml", &data)
if err != nil {
panic(err)
}
out, _ := json.MarshalIndent(data, "", " ")
fmt.Println(string(out))
}
Điều gì xảy ra với chú thích TOML trong quá trình chuyển đổi?
Chú thích TOML (các dòng bắt đầu bằng #) bị loại bỏ trong quá trình chuyển đổi. JSON không hỗ trợ chú thích, vì vậy không có cách nào để giữ chúng trong đầu ra. Nếu bạn cần giữ lại chú thích, hãy xem xét sử dụng JSONC (JSON with Comments) làm định dạng đích thay thế.
Quá trình chuyển đổi TOML sang JSON có bị mất dữ liệu không?
Đối với các tài liệu TOML tiêu chuẩn, không có dữ liệu nào bị mất. Tất cả chuỗi, số, boolean, mảng và bảng đều có kiểu JSON tương đương trực tiếp. Sự biến đổi duy nhất là giá trị ngày và giờ, trở thành chuỗi ISO 8601 trong JSON. Hai trường hợp đặc biệt có thể gây vấn đề: TOML hỗ trợ float infinity và NaN không có biểu diễn JSON, và các số nguyên rất lớn có thể vượt quá giới hạn độ chính xác của JSON parser (2^53 - 1 trong JavaScript).
Mảng bảng trong TOML được biểu diễn như thế nào trong JSON?
Cú pháp [[double-bracket]] của TOML định nghĩa một mảng bảng. Mỗi khối [[section]] thêm một đối tượng mới vào mảng JSON. Ví dụ, hai khối [[fruits]] trở thành một mảng JSON với hai đối tượng: "fruits": [{...}, {...}]. Cú pháp dấu ngoặc kép là một trong những phần khó đọc nhất của TOML; đầu ra JSON làm cho cấu trúc trở nên rõ ràng.
Quá trình chuyển đổi có thể đảo ngược không? Tôi có thể chuyển từ JSON về TOML không?
Về mặt cấu trúc, có thể. Bất kỳ đối tượng JSON nào cũng có thể được biểu diễn dưới dạng bảng TOML, và mảng JSON ánh xạ sang mảng TOML. Tuy nhiên, các tính năng đặc trưng của TOML như chú thích, nhóm dotted key và định dạng inline table bị mất trong quá trình chuyển đổi TOML-to-JSON ban đầu và không thể khôi phục. Quá trình chuyển đổi vòng tròn sẽ tạo ra TOML hợp lệ nhưng có thể kém dễ đọc hơn.
Sự khác biệt giữa TOML và JSON cho các tệp cấu hình là gì?
TOML được thiết kế cho cấu hình: nó hỗ trợ chú thích, có cú pháp dễ đọc hơn cho cấu trúc lồng nhau, phân biệt giữa số nguyên và số thực, và bao gồm kiểu ngày/giờ gốc. JSON được thiết kế cho trao đổi dữ liệu giữa các chương trình. JSON được hỗ trợ rộng rãi hơn bởi các công cụ và API, nhưng TOML dễ đọc và chỉnh sửa hơn cho con người. Nhiều dự án sử dụng TOML cho cấu hình nguồn và chuyển đổi sang JSON để triển khai.
Công cụ xử lý dotted key như server.host như thế nào?
Dotted key trong TOML (ví dụ: server.host = "localhost") tạo ra các đối tượng lồng nhau trong JSON: {"server": {"host": "localhost"}}. Điều này tương đương với việc định nghĩa bảng [server] với key host. Công cụ chuyển đổi tự động giải quyết dotted key thành cấu trúc lồng nhau đầy đủ của chúng.
Tại sao tệp TOML của tôi không chuyển đổi được?
Các nguyên nhân phổ biến bao gồm: thiếu dấu ngoặc kép quanh giá trị chuỗi (TOML yêu cầu chúng), sử dụng tab để thụt lề bên trong chuỗi cơ bản nhiều dòng, định nghĩa key trùng lặp và kết hợp dotted key với tiêu đề bảng tường minh cho cùng một đường dẫn. Công cụ chuyển đổi hiển thị thông báo lỗi parser kèm số dòng để giúp bạn xác định vấn đề.