ToolDeck

Chuyển đổi JSON sang TOML

Chuyển đổi JSON sang định dạng TOML

Thử ví dụ

JSON đầu vào

TOML đầu ra

Chạy cục bộ · An toàn để dán thông tin bí mật
Kết quả TOML sẽ hiện ở đây…

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

Chuyển đổi JSON sang TOML là quá trình biến đổi dữ liệu từ JavaScript Object Notation sang Tom's Obvious Minimal Language. JSON sử dụng dấu ngoặc nhọn, dấu ngoặc vuông và khóa được trích dẫn để biểu diễn dữ liệu có cấu trúc. TOML sử dụng cú pháp khóa-giá trị phẳng với các tiêu đề phần (gọi là bảng) — đọc giống tệp INI nhưng có kiểu dữ liệu chặt chẽ. TOML được thiết kế đặc biệt cho các tệp cấu hình, nơi khả năng đọc của con người quan trọng hơn khả năng trao đổi dữ liệu máy móc.

TOML đã trở thành định dạng cấu hình mặc định cho Rust (Cargo.toml), đóng gói Python (pyproject.toml), trang web tĩnh Hugo, cài đặt triển khai Netlify và nhiều công cụ dòng lệnh. Khi dữ liệu nguồn của bạn tồn tại dưới dạng JSON — từ phản hồi API, cấu hình được xuất ra, hoặc tệp được tạo tự động — và hệ thống đích yêu cầu TOML, bạn cần một bộ chuyển đổi ánh xạ đối tượng JSON thành bảng TOML, mảng JSON thành mảng TOML, và bảo toàn chính xác mọi kiểu dữ liệu.

Chuyển đổi JSON sang TOML trực tuyến là cách nhanh nhất để tạo TOML hợp lệ từ dữ liệu JSON hiện có. Quá trình chuyển đổi xử lý ánh xạ kiểu dữ liệu tự động: chuỗi JSON thành chuỗi TOML, số JSON thành số nguyên hoặc số thực TOML, boolean ánh xạ trực tiếp, và đối tượng JSON thành bảng TOML. Ngoại lệ duy nhất là null — TOML không có kiểu null, vì vậy các giá trị null được bỏ qua hoặc chuyển thành chuỗi rỗng tùy theo bộ chuyển đổi.

Tại sao sử dụng bộ chuyển đổi JSON sang TOML này?

TOML là định dạng mà các tệp cấu hình yêu cầu; JSON là định dạng mà các API và công cụ tạo ra. Bộ chuyển đổi này lấp đầy khoảng cách để bạn có thể di chuyển dữ liệu giữa hai định dạng mà không cần viết lại thủ công.

Chuyển đổi tức thì
Dán JSON và nhận kết quả TOML ngay lập tức. Quá trình chuyển đổi chạy khi bạn gõ, không có vòng truy cập máy chủ hay tải lên tệp.
🔒
Xử lý ưu tiên quyền riêng tư
Toàn bộ quá trình chuyển đổi diễn ra cục bộ trên trình duyệt của bạn. Bí mật cấu hình, khóa API và thông tin đăng nhập cơ sở dữ liệu trong JSON của bạn không bao giờ rời khỏi thiết bị.
🔀
Hỗ trợ cấu trúc đầy đủ
Đối tượng lồng nhau trở thành bảng TOML, mảng đối tượng trở thành mảng bảng ([[table]]), và mảng kiểu hỗn hợp được xử lý chính xác.
📋
Không cần tài khoản
Mở trang và chuyển đổi ngay. Không đăng ký, không cài đặt tiện ích mở rộng, không phụ thuộc CLI. Hoạt động trên bất kỳ thiết bị nào có trình duyệt hiện đại.

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

Cấu hình dự án Rust
Cargo.toml định nghĩa các phụ thuộc, tính năng và cài đặt build cho dự án Rust. Chuyển đổi danh sách phụ thuộc JSON hoặc cấu hình được tạo tự động sang định dạng Cargo.toml trực tiếp.
Đóng gói Python (pyproject.toml)
PEP 518 và PEP 621 đã chuẩn hóa pyproject.toml là tệp siêu dữ liệu dự án Python. Chuyển đổi siêu dữ liệu gói JSON hiện có sang cấu trúc TOML yêu cầu.
Cấu hình trang web tĩnh
Hugo, Netlify và các trình tạo trang web tĩnh khác sử dụng tệp cấu hình TOML. Khi di chuyển từ thiết lập dựa trên JSON hoặc tạo cấu hình theo chương trình, hãy chuyển đổi kết quả sang TOML.
DevOps và hạ tầng
Các công cụ như Terraform (cho một số nhà cung cấp nhất định), Consul và các môi trường chạy container khác nhau chấp nhận cấu hình TOML. Chuyển đổi cài đặt được xuất dưới dạng JSON sang TOML mà không cần nhập lại giá trị.
Phản hồi API sang tệp cấu hình
Các REST API trả về JSON. Khi bạn cần sử dụng dữ liệu đó làm cấu hình TOML — ví dụ như cờ tính năng hoặc cài đặt môi trường — hãy dán phản hồi và nhận TOML hợp lệ.
Học cú pháp TOML
Sinh viên và lập trình viên mới làm quen với TOML có thể dán các cấu trúc JSON quen thuộc và xem kết quả TOML tương đương.

So sánh JSON và TOML

JSON và TOML có khả năng tương đồng nhưng khác nhau về cú pháp, hỗ trợ kiểu dữ liệu và mục đích sử dụng. Bảng này cho thấy những khác biệt ảnh hưởng đến quá trình chuyển đổi.

Tính năngJSONTOML
SyntaxBraces, brackets, colons, commasKey = value, [table], [[array]]
CommentsNot allowed (RFC 8259)Supported with #
Data typesstring, number, boolean, null, object, arraystring, integer, float, boolean, datetime, array, table
null supportNative (null)No null type — omit the key or use empty string
Nested objectsUnlimited nesting depthDotted keys or [table.subtable] headers
Arrays of objectsArray of objects with [][[array-of-tables]] syntax
ReadabilityModerate — bracket-heavy at depthHigh — flat key-value pairs
SpecRFC 8259 / ECMA-404TOML v1.0.0 (toml.io)

Những điểm cần lưu ý khi chuyển đổi TOML

TOML có các quy tắc khác với JSON theo những cách ảnh hưởng đến kết quả chuyển đổi. Bốn vấn đề sau gây ra nhầm lẫn nhiều nhất.

TOML không có kiểu null
JSON hỗ trợ null như một giá trị hạng nhất. TOML hoàn toàn không có kiểu null. Khi chuyển đổi, các giá trị null phải được xử lý — bằng cách bỏ qua khóa hoàn toàn, sử dụng chuỗi rỗng hoặc chọn giá trị đặt chỗ. Điều này có nghĩa là chuyển đổi khứ hồi từ JSON sang TOML rồi trở lại có thể không tái tạo các giá trị null ban đầu.
Mảng kiểu hỗn hợp bị giới hạn
Mảng JSON có thể tự do kết hợp các kiểu: [1, "two", true]. TOML v1.0.0 yêu cầu tất cả các phần tử trong mảng phải cùng kiểu. Nếu JSON của bạn chứa mảng kiểu hỗn hợp, bộ chuyển đổi phải chuyển tất cả phần tử thành chuỗi hoặc báo lỗi. Kiểm tra kết quả khi mảng nguồn chứa các kiểu hỗn hợp.
Đối tượng lồng sâu trở nên dài dòng
JSON xử lý lồng sâu một cách tự nhiên với các dấu ngoặc lồng nhau. TOML sử dụng khóa có dấu chấm hoặc tiêu đề [table.subtable.key] nối tiếp nhau, có thể trở nên dài dòng với các cấu trúc lồng sâu. Kết quả hợp lệ nhưng kém gọn hơn JSON gốc.
Hạn chế về đặt tên khóa
Khóa đơn giản trong TOML chỉ có thể chứa chữ cái ASCII, chữ số, dấu gạch ngang và dấu gạch dưới. Khóa JSON có thể là bất kỳ chuỗi nào. Nếu JSON của bạn có khóa chứa dấu cách, dấu chấm hoặc ký tự đặc biệt, các khóa đó phải được trích dẫn trong kết quả TOML. Hầu hết các bộ chuyển đổi xử lý điều này tự động, nhưng hãy kiểm tra kết quả nếu khóa của bạn chứa ký tự bất thường.

Ví dụ mã nguồn

Chuyển đổi JSON sang TOML theo chương trình yêu cầu thư viện tuần tự hóa TOML trong hầu hết các ngôn ngữ. Thư viện chuẩn phân tích JSON; kết quả TOML cần một gói chuyên dụng.

JavaScript (Node.js)
import { stringify } from '@iarna/toml'

const json = '{"title":"My App","database":{"host":"localhost","port":5432}}'
const obj = JSON.parse(json)
const toml = stringify(obj)
console.log(toml)
// → title = "My App"
// →
// → [database]
// → host = "localhost"
// → port = 5432
Python
import json
import tomli_w  # pip install tomli_w

json_str = '{"title": "My App", "database": {"host": "localhost", "port": 5432}}'
data = json.loads(json_str)
toml_str = tomli_w.dumps(data)
print(toml_str)
# → title = "My App"
# →
# → [database]
# → host = "localhost"
# → port = 5432
Go
package main

import (
    "encoding/json"
    "fmt"
    "github.com/pelletier/go-toml/v2"
)

func main() {
    jsonStr := `{"title":"My App","database":{"host":"localhost","port":5432}}`
    var data map[string]interface{}
    json.Unmarshal([]byte(jsonStr), &data)

    tomlBytes, _ := toml.Marshal(data)
    fmt.Println(string(tomlBytes))
    // → title = 'My App'
    // →
    // → [database]
    // → host = 'localhost'
    // → port = 5432
}
CLI (yj / remarshal)
# Using yj (https://github.com/sclevine/yj)
echo '{"title":"My App","port":3000}' | yj -jt
# → title = "My App"
# → port = 3000

# Using remarshal (pip install remarshal)
echo '{"title":"My App","port":3000}' | remarshal -if json -of toml
# → title = "My App"
# → port = 3000

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

Chuyển đổi JSON sang TOML có mất dữ liệu không?
Với hầu hết dữ liệu, không. Chuỗi, số nguyên, số thực, boolean, đối tượng và mảng đều có các giá trị TOML tương đương trực tiếp. Hai ngoại lệ là null (TOML không có kiểu null, vì vậy các giá trị null bị bỏ qua hoặc thay thế) và mảng kiểu hỗn hợp (TOML yêu cầu các phần tử mảng cùng kiểu). Nếu JSON của bạn tránh hai mẫu này, quá trình chuyển đổi hoàn toàn không mất dữ liệu.
Điều gì xảy ra với giá trị null trong JSON khi chuyển sang TOML?
TOML không có kiểu null. Các bộ chuyển đổi thường bỏ qua các khóa có giá trị null trong kết quả, vì không có cách nào biểu diễn "khóa tồn tại nhưng không có giá trị" trong TOML. Một số bộ chuyển đổi cho phép bạn chọn sử dụng chuỗi rỗng thay thế. Kiểm tra kết quả nếu giá trị null mang ý nghĩa trong dữ liệu của bạn.
TOML có thể biểu diễn đối tượng JSON lồng nhau không?
Có. Đối tượng JSON trở thành bảng TOML. Đối tượng lồng như {"database": {"host": "localhost"}} chuyển thành tiêu đề bảng [database] với host = "localhost" bên dưới. Độ sâu lồng tùy ý được hỗ trợ thông qua khóa có dấu chấm hoặc tiêu đề bảng lồng nhau.
Tại sao Rust và Python sử dụng TOML thay vì JSON?
TOML hỗ trợ chú thích, điều cần thiết để ghi chép các lựa chọn cấu hình. TOML cũng tạo ra kết quả gọn hơn cho các cài đặt khóa-giá trị phẳng, vốn chiếm phần lớn siêu dữ liệu gói. JSON cấm chú thích (RFC 8259), khiến nó khó bảo trì hơn như một định dạng cấu hình do con người chỉnh sửa.
TOML xử lý ngày và giờ như thế nào?
TOML có các kiểu ngày giờ gốc: datetime có múi giờ (2024-01-15T10:30:00Z), datetime cục bộ, ngày cục bộ và giờ cục bộ. JSON không có kiểu ngày — ngày được lưu dưới dạng chuỗi. Khi chuyển đổi JSON sang TOML, các chuỗi giống ngày vẫn là chuỗi trừ khi bộ chuyển đổi phát hiện và chuyển đổi rõ ràng các mẫu ISO 8601.
Có an toàn khi dán bí mật và thông tin xác thực vào công cụ này không?
Có. Quá trình chuyển đổi chạy hoàn toàn trên trình duyệt của bạn bằng JavaScript. Không có dữ liệu nào được gửi đến bất kỳ máy chủ nào. 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 trong trình duyệt, chuyển sang tab Mạng, và xác nhận rằng không có yêu cầu nào được thực hiện trong quá trình chuyển đổi.
Kết quả tuân theo phiên bản TOML nào?
Kết quả tuân theo TOML v1.0.0, được phát hành vào tháng 1 năm 2021 và là đặc tả ổn định hiện tại. Phiên bản này yêu cầu các mảng cùng kiểu, hỗ trợ khóa có dấu chấm và định nghĩa định dạng datetime. Đặc tả được duy trì tại toml.io.