การแปลง TOML เป็น JSON คืออะไร?TOML (Tom's Obvious Minimal Language) คือรูปแบบไฟล์ config ที่ออกแบบมาสำหรับมนุษย์ มันแมปอย่างชัดเจนกับ hash table รองรับ table ซ้อนกัน value ที่มีประเภทกำกับ และ comment แบบ inline เครื่องมือและ framework หลายตัวใช้ TOML เป็นรูปแบบ config หลัก: โปรเจกต์ Rust ใช้ Cargo.toml, Python packaging ใช้ pyproject.toml และ static site Hugo ตั้งค่าผ่าน config.toml การแปลง TOML เป็น JSON ออนไลน์ช่วยให้คุณแปลงไฟล์ config เหล่านี้เป็นรูปแบบที่แทบทุกภาษาโปรแกรมมิ่ง API และ data pipeline สามารถอ่านได้โดยตรง
JSON (JavaScript Object Notation) ซึ่งกำหนดโดย RFC 8259 คือรูปแบบการแลกเปลี่ยนข้อมูลที่ได้รับการรองรับอย่างแพร่หลายที่สุด แม้ TOML จะให้ความสำคัญกับความสามารถในการอ่านของมนุษย์ด้วยไวยากรณ์ที่กระชับและการรองรับ comment แต่ JSON ให้ความสำคัญกับความสามารถในการทำงานร่วมกับเครื่อง เครื่องมือแปลง TOML เป็น JSON เชื่อมช่องว่างนี้โดย parse ข้อมูล TOML ตาม TOML v1.0.0 specification และสร้าง JSON document ที่มีโครงสร้างเทียบเท่า การแปลงรักษาข้อมูลทั้งหมด: string, integer, float, boolean, array และ table แมปตรงกับ JSON counterpart
TOML มีประเภทวันที่และเวลาในตัวสี่ประเภทที่ JSON ไม่สามารถแสดงได้โดยตรง: offset date-time, local date-time, local date และ local time JSON ไม่มีประเภทวันที่ ดังนั้น value เหล่านี้จะถูก serialize เป็น ISO 8601 string ระหว่างการแปลง
ทำไมต้องใช้เครื่องมือแปลง TOML เป็น JSON?ไฟล์ config ที่เขียนด้วย TOML มักต้องส่งข้อมูลไปยังระบบที่รับเฉพาะ JSON แทนที่จะเขียนไฟล์ใหม่ด้วยมือหรือติดตั้ง parser library ในเครื่อง เครื่องมือบนเบราว์เซอร์จัดการการแปลงนี้ได้ภายในไม่กี่วินาที
🔒 ประมวลผลแบบให้ความสำคัญกับความเป็นส่วนตัว
ข้อมูล TOML ของคุณถูก parse และแปลงทั้งหมดในเบราว์เซอร์ ไม่มีข้อมูลถูกอัปโหลดไปยัง server ทำให้ปลอดภัยในการแปลงไฟล์ config ที่มี API key ข้อมูลประจำตัวฐานข้อมูล หรือชื่อ host ภายใน
⚡ แปลงได้ทันที
วาง TOML แล้วรับผลลัพธ์ JSON ที่จัดรูปแบบแล้วทันที ไม่ต้องติดตั้ง Node.js packages, Python libraries หรือเครื่องมือ CLI เพียงเพื่อแปลงรูปแบบครั้งเดียว
🔀 รองรับ TOML v1.0.0 ครบถ้วน
เครื่องมือนี้รองรับประเภทข้อมูล TOML ทั้งหมด รวมถึง dotted key, inline table, array of table, multi-line string และ date-time value กรณีพิเศษที่มักเกิดปัญหาในการแปลงด้วยมือได้รับการจัดการอย่างถูกต้อง
📋 ไม่ต้องสมัครบัญชี
เปิดหน้าเว็บ วาง TOML แล้ว copy ผลลัพธ์ JSON ไม่ต้องสมัคร ไม่มี rate limit และไม่มีการติดตามการใช้งาน เครื่องมือทำงานเหมือนกันทุกครั้งที่เข้าใช้งาน
กรณีการใช้งาน TOML เป็น JSONFrontend Development
แปลง metadata จาก Cargo.toml ของโปรเจกต์ Rust WASM เป็น JSON เพื่อใช้ใน JavaScript build script หรือขั้นตอนการสร้าง package.json
Backend Engineering
แปลง config ของแอปพลิเคชันที่เขียนด้วย TOML เป็น JSON เพื่อใส่ใน environment ที่ต้องการ JSON config เช่น environment variables ของ AWS Lambda หรือ label ของ Docker container
DevOps และ CI/CD
เครื่องมือ pipeline อย่าง GitHub Actions และ GitLab CI มักทำงานกับ JSON input แปลงการตั้งค่าเครื่องมือที่ใช้ TOML (rustfmt.toml, taplo.toml) เป็น JSON สำหรับขั้นตอน linting หรือ validation
QA และการทดสอบ
สร้าง JSON test fixture จาก TOML source file TOML ดูแลรักษาง่ายกว่าในฐานะแหล่งข้อมูลทดสอบเพราะรองรับ comment และไวยากรณ์ที่อ่านง่าย แต่ test harness มักคาดหวัง JSON input
Data Engineering
เมื่อย้าย config ระหว่างระบบ ไฟล์ TOML จากแพลตฟอร์มหนึ่ง (เช่น InfluxDB, Telegraf) อาจต้องกลายเป็น JSON document สำหรับ API หรือเครื่องมือ import ของแพลตฟอร์มอื่น
การเรียนรู้และการศึกษา
นักศึกษาที่เรียนรู้รูปแบบข้อมูลสามารถวาง TOML ตัวอย่างและดูว่า table กลายเป็น nested object อย่างไร array of table กลายเป็น JSON array อย่างไร และประเภทวันที่ของ TOML แมปกับ string อย่างไร
ตารางอ้างอิงการแมปประเภทข้อมูล TOML เป็น JSONทุกประเภทใน TOML มี JSON ที่เทียบเท่าโดยตรง ยกเว้นหนึ่งประเภท: value วันที่และเวลา ตารางด้านล่างแสดงวิธีที่ประเภท TOML แต่ละประเภทแปลงเป็น JSON การแมปนี้เป็นไปตาม TOML v1.0.0 specification และตรงกับพฤติกรรมของ parser มาตรฐาน เช่น tomllib (Python), toml-rs (Rust) และ @iarna/toml (Node.js)
ประเภท ไวยากรณ์ TOML ผลลัพธ์ 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": [{}]
TOML integer รองรับ underscore เพื่อความอ่านง่าย (เช่น 1_000_000) และตัวเลขฐาน hexadecimal (0xDEADBEEF), octal (0o755) และ binary (0b11010110) ทั้งหมดนี้แปลงเป็นตัวเลขฐานสิบธรรมดาใน JSON TOML ยังรองรับ infinity และ NaN สำหรับ float แต่ไม่มีการแสดงใน JSON และจะทำให้เกิดข้อผิดพลาดในการแปลงเมื่อใช้ strict mode
ตัวอย่าง Codeตัวอย่างการทำงานของการแปลง TOML เป็น JSON ในสี่ภาษา แต่ละตัวอย่างอ่านไฟล์ TOML, parse และแสดงผล JSON ที่จัดรูปแบบแล้ว
JavaScript (Node.js) Copy
import { parse } from '@iarna/toml'
import fs from 'fs'
const toml = fs.readFileSync('config.toml', 'utf8')
const json = parse(toml)
console.log(JSON.stringify(json, null, 2))
// Input: [server]
// host = "localhost"
// port = 8080
// Output: { "server": { "host": "localhost", "port": 8080 } } Python Copy
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 Copy
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))
} CLI (yj / dasel) Copy
# Using yj (YAML/JSON/TOML converter)
cat config.toml | yj -tj
# Using dasel
dasel -f config.toml -r toml -w json
# Using Python one-liner (3.11+)
python3 -c "import tomllib, json, sys; print(json.dumps(tomllib.load(sys.stdin.buffer), indent=2, default=str))" < config.toml คำถามที่พบบ่อยเกิดอะไรขึ้นกับ comment ของ TOML ระหว่างการแปลง?
TOML comment (บรรทัดที่ขึ้นต้นด้วย #) จะถูกทิ้งระหว่างการแปลง JSON ไม่รองรับ comment จึงไม่มีวิธีเก็บรักษาไว้ในผลลัพธ์ หากต้องการเก็บ comment ไว้ ลองพิจารณาใช้ JSONC (JSON with Comments) เป็นรูปแบบปลายทางแทน
การแปลง TOML เป็น JSON สูญเสียข้อมูลไหม?
สำหรับ TOML document มาตรฐาน ไม่มีข้อมูลสูญหาย string, ตัวเลข, boolean, array และ table ทั้งหมดมี JSON ที่เทียบเท่าโดยตรง การเปลี่ยนแปลงเพียงอย่างเดียวคือ value วันที่และเวลา ซึ่งกลายเป็น ISO 8601 string ใน JSON มีสองกรณีพิเศษที่อาจเกิดปัญหา: TOML รองรับ infinity และ NaN float ซึ่งไม่มีการแสดงใน JSON และจำนวนเต็มขนาดใหญ่มากอาจเกินขีดจำกัดความแม่นยำของ JSON parser (2^53 - 1 ใน JavaScript)
TOML array of table แสดงใน JSON อย่างไร?
ไวยากรณ์ [[double-bracket]] ของ TOML กำหนด array of table แต่ละ [[section]] block เพิ่ม object ใหม่ใน JSON array ตัวอย่างเช่น [[fruits]] สอง block กลายเป็น JSON array ที่มีสอง object: "fruits": [{...}, {...}] ไวยากรณ์ double-bracket เป็นหนึ่งในส่วนที่อ่านยากกว่าของ TOML แต่ผลลัพธ์ JSON ทำให้โครงสร้างชัดเจนขึ้น
การแปลงสามารถย้อนกลับได้ไหม? สามารถแปลงจาก JSON กลับเป็น TOML ได้ไหม?
ในแง่โครงสร้าง ได้ JSON object ใดก็ได้สามารถแสดงเป็น TOML table และ JSON array แมปกับ TOML array อย่างไรก็ตาม คุณสมบัติเฉพาะของ TOML อย่าง comment, dotted key grouping และรูปแบบ inline table จะหายไประหว่างการแปลง TOML เป็น JSON ครั้งแรกและไม่สามารถกู้คืนได้ การแปลงไป-กลับจะได้ TOML ที่ถูกต้องแต่อาจอ่านได้ยากกว่าเดิม
TOML กับ JSON ต่างกันอย่างไรสำหรับไฟล์ config?
TOML ถูกออกแบบมาสำหรับ config: รองรับ comment มีไวยากรณ์ที่อ่านง่ายกว่าสำหรับโครงสร้างซ้อนกัน แยกความแตกต่างระหว่าง integer และ float และมีประเภทวันที่/เวลาในตัว JSON ถูกออกแบบมาสำหรับการแลกเปลี่ยนข้อมูลระหว่างโปรแกรม JSON ได้รับการรองรับจากเครื่องมือและ API อย่างแพร่หลายกว่า แต่ TOML อ่านและแก้ไขได้ง่ายกว่าสำหรับมนุษย์ หลายโปรเจกต์ใช้ TOML สำหรับ config ต้นทางและแปลงเป็น JSON สำหรับการ deploy
เครื่องมือนี้จัดการ dotted key อย่าง server.host อย่างไร?
Dotted key ใน TOML (เช่น server.host = "localhost") สร้าง nested object ใน JSON: {"server": {"host": "localhost"}} ซึ่งเทียบเท่ากับการกำหนด [server] table พร้อม host key เครื่องมือแปลง dotted key เป็นโครงสร้างซ้อนกันเต็มรูปแบบโดยอัตโนมัติ
ทำไมไฟล์ TOML ของฉันถึงแปลงไม่ได้?
สาเหตุทั่วไปได้แก่: ลืมใส่เครื่องหมายคำพูดรอบ string value (TOML ต้องการ), ใช้ tab สำหรับ indentation ใน multi-line basic string, กำหนด key ซ้ำกัน และใช้ dotted key ร่วมกับ explicit table header สำหรับ path เดียวกัน เครื่องมือแสดงข้อความผิดพลาดจาก parser พร้อมหมายเลขบรรทัดเพื่อช่วยระบุปัญหา