การแปลง JSON เป็น TOML คืออะไร?การแปลง JSON เป็น TOML คือการเปลี่ยนรูปแบบข้อมูลจาก JavaScript Object Notation ไปเป็น Tom's Obvious Minimal Language JSON ใช้วงเล็บปีกกา วงเล็บเหลี่ยม และ key ที่มีเครื่องหมายคำพูดเพื่อแสดงข้อมูลแบบมีโครงสร้าง ส่วน TOML ใช้ไวยากรณ์แบบ key-value ที่เรียบง่ายพร้อม section header (เรียกว่า table) ซึ่งอ่านคล้ายไฟล์ INI แต่มีการกำหนดประเภทข้อมูลที่เข้มงวด TOML ถูกออกแบบมาเพื่อไฟล์ config โดยเฉพาะ โดยให้ความสำคัญกับความสามารถในการอ่านของมนุษย์มากกว่าการแลกเปลี่ยนข้อมูลระหว่างเครื่อง
TOML ได้กลายเป็นรูปแบบ config มาตรฐานสำหรับ Rust (Cargo.toml), Python packaging (pyproject.toml), Hugo static sites, การตั้งค่า Netlify และเครื่องมือ CLI อีกหลายตัว เมื่อข้อมูลต้นทางอยู่ในรูป JSON — จาก API response, ไฟล์ config ที่ export ออกมา หรือไฟล์ที่สร้างขึ้นโดยอัตโนมัติ — และระบบปลายทางคาดหวัง TOML คุณต้องการตัวแปลงที่แมป JSON object เป็น TOML table, JSON array เป็น TOML array และรักษาประเภทข้อมูลทุกอย่างอย่างถูกต้อง
การแปลง JSON เป็น TOML ออนไลน์เป็นวิธีที่เร็วที่สุดในการสร้าง TOML ที่ถูกต้องจากข้อมูล JSON ที่มีอยู่ การแปลงจัดการการแมปประเภทข้อมูลโดยอัตโนมัติ: string ใน JSON กลายเป็น string ใน TOML, ตัวเลขใน JSON กลายเป็น integer หรือ float ใน TOML, boolean แมปตรงกัน และ object ใน JSON กลายเป็น TOML table ข้อยกเว้นคือ null — TOML ไม่มีประเภท null ดังนั้น null value จะถูกละเว้นหรือแปลงเป็น string ว่างขึ้นอยู่กับตัวแปลงที่ใช้
ทำไมต้องใช้เครื่องมือแปลง JSON เป็น TOML นี้?TOML คือสิ่งที่ไฟล์ config ต้องการ ส่วน JSON คือสิ่งที่ API และเครื่องมือต่างๆ สร้างออกมา เครื่องมือนี้เชื่อมช่องว่างระหว่างสองรูปแบบ เพื่อให้คุณย้ายข้อมูลโดยไม่ต้องเขียนใหม่ด้วยมือ
⚡ แปลงได้ทันที
วาง JSON แล้วรับผลลัพธ์ TOML ได้เลย การแปลงทำงานขณะที่คุณพิมพ์โดยไม่มีการส่งข้อมูลไปยัง server หรืออัปโหลดไฟล์
🔒 ประมวลผลแบบให้ความสำคัญกับความเป็นส่วนตัว
การแปลงทั้งหมดเกิดขึ้นในเบราว์เซอร์ของคุณ secret ของ config, API key และข้อมูลประจำตัวของฐานข้อมูลใน JSON จะไม่ออกจากอุปกรณ์ของคุณ
🔀 รองรับโครงสร้างครบถ้วน
object ซ้อนกันกลายเป็น TOML table, array ของ object กลายเป็น array of table ([[table]]) และ array ที่มีหลายประเภทได้รับการจัดการอย่างถูกต้อง
📋 ไม่ต้องสมัครบัญชี
เปิดหน้าเว็บแล้วแปลงได้เลย ไม่ต้องสมัคร ไม่ต้องติดตั้ง extension ไม่มี CLI dependency ใช้งานได้บนอุปกรณ์ใดก็ได้ที่มีเบราว์เซอร์ทันสมัย
กรณีการใช้งาน JSON เป็น TOMLการตั้งค่าโปรเจกต์ Rust
Cargo.toml กำหนด dependency, feature และการตั้งค่า build สำหรับโปรเจกต์ Rust แปลงรายการ dependency ในรูป JSON หรือ config ที่สร้างขึ้นโดยอัตโนมัติเป็นรูปแบบ Cargo.toml โดยตรง
Python Packaging (pyproject.toml)
PEP 518 และ PEP 621 กำหนดมาตรฐาน pyproject.toml เป็นไฟล์ metadata ของโปรเจกต์ Python แปลง JSON package metadata ที่มีอยู่เป็นโครงสร้าง TOML ที่ต้องการ
การตั้งค่า Static Site
Hugo, Netlify และ static site generator อื่นๆ ใช้ไฟล์ config แบบ TOML เมื่อย้ายจาก setup ที่ใช้ JSON หรือสร้าง config ด้วยโปรแกรม ให้แปลงผลลัพธ์เป็น TOML
DevOps และ Infrastructure
เครื่องมืออย่าง Terraform (สำหรับ provider บางตัว), Consul และ container runtime ต่างๆ รับการตั้งค่าแบบ TOML แปลงการตั้งค่าที่ export จาก JSON เป็น TOML โดยไม่ต้องพิมพ์ค่าใหม่
API Response เป็นไฟล์ Config
REST API คืนค่าเป็น JSON เมื่อคุณต้องการใช้ข้อมูลนั้นเป็น TOML config — เช่น feature flag หรือการตั้งค่า environment — ให้วาง response แล้วรับ TOML ที่ถูกต้อง
การเรียนรู้ไวยากรณ์ TOML
นักศึกษาและนักพัฒนาที่เพิ่งเริ่มต้นกับ TOML สามารถวาง JSON structure ที่คุ้นเคยแล้วดู TOML output ที่เทียบเท่าได้
การเปรียบเทียบ JSON กับ TOMLJSON และ TOML มีความสามารถที่ทับซ้อนกันแต่แตกต่างกันในด้านไวยากรณ์ การรองรับประเภทข้อมูล และการใช้งานที่ตั้งใจไว้ ตารางนี้แสดงความแตกต่างที่ส่งผลต่อผลลัพธ์การแปลง
คุณสมบัติ JSON TOML Syntax Braces, brackets, colons, commas Key = value, [table], [[array]] Comments Not allowed (RFC 8259) Supported with # Data types string, number, boolean, null, object, array string, integer, float, boolean, datetime, array, table null support Native (null) No null type — omit the key or use empty string Nested objects Unlimited nesting depth Dotted keys or [table.subtable] headers Arrays of objects Array of objects with [] [[array-of-tables]] syntax Readability Moderate — bracket-heavy at depth High — flat key-value pairs Spec RFC 8259 / ECMA-404 TOML v1.0.0 (toml.io)
ข้อควรระวังในการแปลง TOMLTOML มีกฎที่แตกต่างจาก JSON ในแบบที่ส่งผลต่อผลลัพธ์การแปลง สี่ปัญหาต่อไปนี้เป็นสาเหตุของความสับสนมากที่สุด
TOML ไม่มีประเภท null
JSON รองรับ null เป็น value หลัก TOML ไม่มีประเภท null เลย เมื่อแปลง null value ต้องได้รับการจัดการ — ไม่ว่าจะโดยการละเว้น key ทั้งหมด ใช้ string ว่าง หรือเลือกค่า sentinel ซึ่งหมายความว่าการแปลงไป-กลับระหว่าง JSON และ TOML อาจไม่สามารถผลิต null value เดิมได้
Array ที่มีหลายประเภทถูกจำกัด
JSON array สามารถมีหลายประเภทได้อย่างอิสระ: [1, "สอง", true] TOML v1.0.0 กำหนดให้ element ทั้งหมดใน array ต้องเป็นประเภทเดียวกัน หาก JSON ของคุณมี array ที่ผสมประเภท ตัวแปลงต้องแปลง element ทั้งหมดเป็น string หรือแจ้งข้อผิดพลาด ตรวจสอบผลลัพธ์เมื่อ array ต้นทางมีประเภทผสม
Object ซ้อนกันลึกทำให้ผลลัพธ์ยาว
JSON จัดการการซ้อนกันลึกได้อย่างเป็นธรรมชาติด้วยวงเล็บปีกกาซ้อนกัน TOML ใช้ dotted key หรือ [table.subtable.key] header ที่ต่อกัน ซึ่งอาจยาวสำหรับโครงสร้างที่ซ้อนกันลึก ผลลัพธ์ถูกต้องแต่กระชับน้อยกว่า JSON ต้นฉบับ
ข้อจำกัดในการตั้งชื่อ Key
TOML bare key สามารถมีได้เฉพาะตัวอักษร ASCII ตัวเลข เครื่องหมายขีด และขีดล่าง JSON key สามารถเป็น string ใดก็ได้ หาก JSON ของคุณมี key ที่มีช่องว่าง จุด หรืออักขระพิเศษ key เหล่านั้นต้องใส่เครื่องหมายคำพูดใน TOML output ตัวแปลงส่วนใหญ่จัดการสิ่งนี้โดยอัตโนมัติ แต่ควรตรวจสอบผลลัพธ์หาก key ของคุณมีอักขระพิเศษ
ตัวอย่าง Codeการแปลง JSON เป็น TOML ด้วยโปรแกรมต้องใช้ library สำหรับ TOML ในภาษาส่วนใหญ่ library มาตรฐานสามารถ parse JSON ได้ แต่สำหรับ TOML output ต้องใช้ package เฉพาะทาง
JavaScript (Node.js) Copy
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 Copy
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 Copy
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) Copy
# 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 คำถามที่พบบ่อยการแปลง JSON เป็น TOML สูญเสียข้อมูลไหม?
สำหรับข้อมูลส่วนใหญ่ ไม่สูญเสีย string, integer, float, boolean, object และ array ทั้งหมดมี TOML ที่เทียบเท่าโดยตรง ข้อยกเว้นสองประการคือ null (TOML ไม่มีประเภท null ดังนั้น null value จะถูกละเว้นหรือแทนที่) และ array ที่มีหลายประเภท (TOML กำหนดให้ element ใน array ต้องเป็นประเภทเดียวกัน) หาก JSON ของคุณหลีกเลี่ยงสองรูปแบบนี้ การแปลงจะไม่สูญเสียข้อมูลเลย
JSON null value จะกลายเป็นอะไรใน TOML?
TOML ไม่มีประเภท null ตัวแปลงมักจะละเว้น key ที่มี null value จาก output เนื่องจากไม่มีวิธีแสดง "key มีอยู่แต่ไม่มีค่า" ใน TOML ตัวแปลงบางตัวให้คุณเลือกใช้ string ว่างแทน ตรวจสอบผลลัพธ์หาก null value มีความหมายในข้อมูลของคุณ
TOML สามารถแสดง JSON object ซ้อนกันได้ไหม?
ได้ JSON object กลายเป็น TOML table JSON object ซ้อนกันเช่น {"database": {"host": "localhost"}} แปลงเป็น [database] table header พร้อม host = "localhost" ด้านล่าง รองรับการซ้อนกันในระดับใดก็ได้ผ่าน dotted key หรือ nested table header
ทำไม Rust และ Python ถึงใช้ TOML แทน JSON?
TOML รองรับ comment ซึ่งจำเป็นสำหรับการอธิบายทางเลือกในการตั้งค่า นอกจากนี้ยังผลิตผลลัพธ์ที่สะอาดกว่าสำหรับการตั้งค่าแบบ key-value แบบง่าย ซึ่งเป็นส่วนใหญ่ของ package metadata JSON ไม่อนุญาตให้มี comment (RFC 8259) ทำให้ดูแลรักษาได้ยากกว่าในฐานะรูปแบบ config ที่มนุษย์แก้ไข
TOML จัดการวันที่และเวลาอย่างไร?
TOML มีประเภท datetime ในตัว: offset datetime (2024-01-15T10:30:00Z), local datetime, local date และ local time JSON ไม่มีประเภทวันที่ — วันที่ถูกเก็บเป็น string เมื่อแปลง JSON เป็น TOML string ที่มีรูปแบบวันที่จะยังคงเป็น string เว้นแต่ตัวแปลงจะตรวจจับและแปลงรูปแบบ ISO 8601 โดยเฉพาะ
ปลอดภัยที่จะวาง secret และข้อมูลประจำตัวลงในเครื่องมือนี้ไหม?
ปลอดภัย การแปลงทำงานทั้งหมดในเบราว์เซอร์ของคุณโดยใช้ JavaScript ไม่มีข้อมูลถูกส่งไปยัง server ใด คุณสามารถยืนยันสิ่งนี้ได้โดยเปิด developer tools ของเบราว์เซอร์ ไปที่แท็บ Network และยืนยันว่าไม่มีการส่ง request ใดระหว่างการแปลง
ผลลัพธ์ใช้ TOML version ใด?
ผลลัพธ์ใช้ TOML v1.0.0 ซึ่งเผยแพร่ในเดือนมกราคม 2021 และเป็น specification ที่เสถียรในปัจจุบัน version นี้กำหนดให้ประเภท array ต้องเหมือนกัน รองรับ dotted key และกำหนดรูปแบบ datetime ดูแล spec ได้ที่ toml.io