Chuyển đổi JSON, YAML, TOML và file cấu hình
Chuyển file cấu hình giữa JSON, YAML, TOML, INI, .env và Java .properties, định dạng lại YAML mà không mất comment, và biến file .env thành khối Docker Compose hoặc Kubernetes. Mọi thứ chạy ngay trong trình duyệt khi bạn gõ, không có gì được tải lên máy chủ.
Chuyển định dạng
- Giữ tab Chuyển định dạng (tab mặc định). Chọn định dạng nguồn ở Từ và định dạng đích ở Sang — mặc định là JSON → YAML.
- Dán hoặc gõ dữ liệu nguồn vào ô bên trái, hoặc bấm biểu tượng dán để lấy nội dung từ clipboard. Với đầu vào JSON, Format sẽ định dạng đẹp và kiểm tra tính hợp lệ trước.
- Xem kết quả có tô màu cú pháp ở ô bên phải, rồi dùng biểu tượng sao chép hoặc Tải xuống để lưu thành
converted.yaml,converted.toml… - Với đầu ra JSON và YAML, chọn Thụt lề 2 hoặc 4 khoảng trắng.
- Hoán đổi đưa kết quả hiện tại trở lại ô nhập và đảo chiều chuyển đổi — tiện khi cần chuyển đi chuyển lại một file cấu hình.
Các tuỳ chọn chỉ hiện khi phù hợp với định dạng bạn chọn:
- Đầu vào INI: Đọc theo kiểu (số, true/false, null) đọc
8080vàtruekhông có dấu nháy thành số và boolean thay vì chuỗi; giá trị có dấu nháy luôn là chuỗi. Key lặp lại quyết định cách xử lý key được gán hai lần: giữ giá trị cuối, giữ giá trị đầu, hoặc gom thành danh sách. - Đầu vào .env: một công tắc thay thế
${VAR},${VAR:-default}và$VARbằng các biến đã khai báo phía trên trong file. - Đầu vào .env và .properties: Dựng lại cấp lồng theo dấu phân cách biến
APP__PORThayserver.porttrở lại thành object lồng nhau. - Đầu ra .env và .properties: object lồng nhau được làm phẳng bằng dấu phân cách bạn chọn (mặc định
__cho .env,.cho .properties), còn danh sách thành key đánh số. Thêm tiền tố export ghiexport KEY=value, và một công tắc khác ghi ký tự ngoài ASCII thành\uXXXX— điều Java 8 trở về trước cần.
Mỗi định dạng hiểu được những gì:
- TOML: bảng, mảng bảng, bảng inline và ngày giờ (ngày giờ thành chuỗi khi chuyển sang JSON).
- INI: tiêu đề
[section]và[section.sub], key có dấu chấm nhưa.b = 1, danh sách viết dạngkey[] = value, comment bắt đầu bằng;hoặc#(sau giá trị thì cần một khoảng trắng đứng trước), và giá trị trong dấu nháy giữ nguyên khoảng trắng. - .env: tiền tố
export, giá trị không nháy, nháy đơn, nháy kép, giá trị nháy kép trải trên nhiều dòng, mã thoát\nvà comment. - .properties:
=,:hoặc khoảng trắng giữa key và giá trị, dấu\cuối dòng để viết tiếp dòng sau, mã thoát\uXXXX, comment#hoặc!. - XML có công cụ riêng — theo liên kết tới công cụ chuyển đổi XML nằm cạnh ô thụt lề.
Khi chuyển đổi không trọn vẹn
Không phải định dạng nào cũng chứa được mọi giá trị, nhưng không có gì bị bỏ đi âm thầm — khung vàng dưới kết quả liệt kê những gì đã thay đổi:
- TOML không có null, nên key và phần tử danh sách mang giá trị null bị xoá, còn danh sách ở cấp ngoài cùng thì không ghi được.
- .env và .properties chỉ chứa chuỗi phẳng: object lồng nhau bị làm phẳng, danh sách thành key đánh số, số và true/false thành chuỗi, null thành giá trị rỗng.
- Danh sách INI chỉ chứa giá trị đơn, nên danh sách object được ghi thành chuỗi JSON và danh sách rỗng bị bỏ.
- Key được gán hai lần trong INI, .env hoặc .properties được báo kèm số dòng.
- File YAML có nhiều tài liệu (ngăn bằng
---) được đọc thành một danh sách.
Định dạng YAML
Chuyển sang Định dạng YAML để định dạng lại YAML mà không đổi sang định dạng khác:
- Dán YAML vào bên trái. Lỗi cú pháp được liệt kê kèm dòng và cột.
- Chọn Thụt lề, Sắp xếp key, Độ rộng dòng (Không ngắt dòng, 80 hoặc 120) và Kiểu viết: Giữ nguyên để mọi danh sách và map như cũ, Block viết mỗi phần tử một dòng, Flow viết dạng gọn
{a: 1, b: [x, y]}. - Sao chép hoặc tải kết quả về, hoặc nhấn Dùng làm đầu vào để tiếp tục chỉnh sửa.
Comment luôn đi kèm key mà nó mô tả — kể cả khi sắp xếp key — và file nhiều tài liệu --- vẫn được tách đúng như cũ.
Trình định dạng còn cảnh báo các bẫy YAML 1.1: giá trị mà trang này đọc theo YAML 1.2 nhưng các trình đọc cũ như PyYAML, go-yaml v2 hay SnakeYAML lại hiểu khác. no, yes, on và off thành boolean ("vấn đề Na Uy": mã quốc gia NO biến thành false), 0755 thành số bát phân 493, giờ không nháy như 12:30 và ánh xạ cổng như 22:22 thành số cơ số 60, còn 1_000 thành 1000. Đặt các giá trị đó trong dấu nháy thì trình đọc nào cũng hiểu giống nhau. Các cảnh báo này cũng hiện trong tab Chuyển định dạng khi đầu vào là YAML.
.env ↔ Docker Compose và Kubernetes
Chuyển sang .env ↔ Docker / K8s rồi chọn chiều:
- .env → environment của Compose ghi khối
environment:, dạng map (KEY: "value") hoặc danh sách (- KEY=value). Mọi giá trị đều được đặt trong dấu nháy nên8080,truevànovẫn là chuỗi, và mỗi$được viết thành$$để Compose không coi đó là biến — tắt công tắc này nếu bạn muốn Compose thay thế biến. - .env → data của ConfigMap ghi khối
data:. Gõ tên ConfigMap để có thêm phần đầu manifest đầy đủ. Key mà Kubernetes sẽ từ chối được đánh dấu cảnh báo. - Compose / ConfigMap → .env đọc cả file compose (khối
environmentcủa mọi service, dạng map hoặc danh sách), một khốienvironment:riêng lẻ, hoặc một ConfigMap, rồi ghi ra file .env. - .env → JSON và JSON → .env chuyển trực tiếp, với cùng các tuỳ chọn dấu phân cách và cấp lồng như trên.
Câu hỏi thường gặp
Chuyển YAML sang JSON có giữ lại comment không?
Không. JSON không có cú pháp comment, nên comment bị bỏ khi chuyển đổi. Nếu chỉ muốn làm gọn file YAML, hãy dùng Định dạng YAML — công cụ này giữ lại mọi comment.
Tại sao JSON có dấu phẩy thừa lại báo lỗi?
Công cụ dùng cách phân tích JSON nghiêm ngặt, không cho phép dấu phẩy cuối. Hãy xóa dấu phẩy thừa (hoặc dùng Format để phát hiện) là sẽ chuyển đổi được.
Vì sao JSON của tôi không ghi được thành TOML?
Tài liệu TOML phải là một bảng key/giá trị ở cấp ngoài cùng. Mảng JSON hay một giá trị đơn lẻ không có dạng TOML tương ứng, nên hãy bọc nó trong một object trước, ví dụ {"items": [1, 2]}.
Vì sao on: push trong workflow GitHub bị cảnh báo?
GitHub đọc workflow theo YAML 1.2, nơi on chỉ là một chuỗi bình thường, nên workflow vẫn chạy. Nhưng công cụ đọc cùng file đó bằng trình phân tích YAML 1.1 sẽ thấy true: push. Cảnh báo giúp bạn tự quyết định; viết "on": push thì an toàn với mọi trình đọc.