การตั้งค่า TOML (.toml)
TOML มาตรฐานTom's Obvious Minimal Language (TOML) คือรูปแบบการกำหนดค่าที่ชัดเจนและมุ่งเน้นมนุษย์เป็นศูนย์กลาง สร้างขึ้นโดย Tom Preston-Werner ผู้ร่วมก่อตั้ง GitHub ซึ่งได้รับการยอมรับอย่างแพร่หลายในระบบนิเวศการเขียนโปรแกรมสมัยใหม่ เช่น Rust (Cargo) และ Python (pyproject.toml)
แปลง TOML เป็น JSON
ตัวแปลงจาก TOML เป็น JSON ฟรีในเบราว์เซอร์ แปลงไฟล์ได้ทันทีบนอุปกรณ์ของคุณ
ตรวจสอบไฟล์และข้อมูลเมตา
ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ TOML โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:
ลายเซ็นส่วนหัวระดับไบต์
ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ TOML โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:
ลายเซ็น HEX (OFFSET 0):
5B ... 5Dการแสดงผลรูปแบบ ASCII: [...]
มาตรฐาน: TOML v1.0.0 Specification
ข้อมูลจำเพาะทางเทคนิค
| สถาปัตยกรรมคอนเทนเนอร์ | ไฟล์กำหนดค่าที่อ่านเข้าใจง่ายและแมปกับตารางแฮชอย่างชัดเจน จัดโครงสร้างด้วย [tables] และคู่ key = value |
| การบีบอัด | สตรีมข้อความแบบไม่บีบอัด |
| การจัดลำดับไบต์ | สตรีมข้อความ UTF-8 |
| พื้นที่สี | ไม่เกี่ยวข้อง (ไฟล์กำหนดค่า) |
| ช่องสัญญาณและโครงสร้าง | ตาราง, อาร์เรย์ของตาราง, ตารางในบรรทัด, สตริง, จำนวนเต็ม, จำนวนทศนิยม, ค่าบูลีน และวันเวลาตาม RFC 3339 |
| ขนาดสูงสุด | ความยาวข้อความไม่จำกัด |
| ความโปร่งใส | ไม่มี |
| การสตรีมและแบบโปรเกรสซีฟ | แยกวิเคราะห์ไฟล์กำหนดค่าตามลำดับทีละบรรทัด |
ตารางเปรียบเทียบทางเทคนิค: TOML กับคู่แข่ง
| คุณลักษณะทางเทคนิค | TOML (ปัจจุบัน) | YAML | JSON | INI |
|---|---|---|---|---|
| ความเสี่ยงจากความคลุมเครือ | ศูนย์ (ข้อกำหนดชัดเจนอย่างเคร่งครัด) | สูง (บั๊กค่าบูลีน 'ปัญหาจอร์เวย์' ของ YAML) | ศูนย์ (ประเภทข้อมูลที่เข้มงวด) | ปานกลาง (ไม่มีมาตรฐานที่เป็นทางการ) |
| ประเภทข้อมูลวันที่และเวลาแบบเนทีฟ | รองรับวันที่และเวลาตามมาตรฐาน RFC 3339 แบบเนทีฟ | การแยกวิเคราะห์สตริง / วันที่โดยนัย | ไม่มี (มีแต่สตริง) | ไม่มี (มีแต่สตริง) |
| การรองรับคอมเมนต์ | รองรับคอมเมนต์ # ในตัว | รองรับคอมเมนต์ # ในตัว | ไม่อนุญาตให้มีคอมเมนต์ | รองรับคอมเมนต์ ; และ # ในตัว |
| ระบบนิเวศหลัก | Rust (Cargo), Python (PEP 518), Go | Kubernetes, Ansible, ไปป์ไลน์ CI/CD | เว็บ API, การสื่อสารในเบราว์เซอร์ | Windows รุ่นเก่า, การกำหนดค่า Git |
รูปแบบความเสียหายทั่วไปและคู่มือการกู้คืน Hex
ข้อผิดพลาดของตัวแยกวิเคราะห์: 'Duplicate key in table' หรือ 'Invalid table header'
สาเหตุหลัก: พยายามกำหนดคีย์หรือเนมสเปซของตารางที่มีอยู่แล้วซ้ำภายในเอกสาร
การกู้คืน: ตรวจสอบความถูกต้องและจัดรูปแบบไวยากรณ์ TOML ใหม่โดยใช้ตัวจัดรูปแบบ TOML ของ File2File.app
การวิเคราะห์ความปลอดภัยและเวกเตอร์การโจมตีตัวแยกวิเคราะห์
ตัวแยกวิเคราะห์ TOML ต้องป้องกันการปนเปื้อนพร็อตโทไทป์และการใช้ CPU จนเต็มจากการซ้อนอาร์เรย์ของตารางในรูปแบบที่ผิดปกติ
เวกเตอร์การโจมตีที่ทราบ
- การปนเปื้อนพร็อตโทไทป์ในตัวแยกวิเคราะห์ TOML ของ JavaScript ซึ่งแทรกคุณสมบัติเข้าไปใน Object.prototype
- การปฏิเสธการให้บริการผ่านการประกาศอาร์เรย์ตารางที่ซ้อนกันลึก
- การจัดสรรหน่วยความจำที่ไม่จำกัดในระหว่างการแยกวิเคราะห์อาร์เรย์แบบอินไลน์ขนาดใหญ่
แนวทางปฏิบัติที่ดีที่สุดในการป้องกัน: ตรวจสอบขีดจำกัดการซ้อนตาราง และใช้ออบเจ็กต์พจนานุกรมที่ป้องกันการปนเปื้อนพร็อตโทไทป์
ประวัติความเป็นมาและเหตุการณ์สำคัญ
ข้อได้เปรียบและจุดเด่นสำคัญ
- ไม่มีความคลุมเครือโดยสิ้นเชิง: จัดเก็บข้อมูลลงในตารางแฮชได้อย่างตรงไปตรงมาและคาดเดาได้ โดยไม่มีการแปลงชนิดข้อมูลที่ไม่คาดคิด
- รองรับวันที่และเวลาโดยตรงเป็นความสามารถพื้นฐาน (วัน เวลา และการประทับเวลาตาม RFC 3339) โดยไม่ต้อง escape สตริง
- ถูกนำมาใช้เป็นรูปแบบการกำหนดค่ามาตรฐานอย่างเป็นทางการสำหรับเครื่องมือภาษาสมัยใหม่ (Rust Cargo.toml, Python pyproject.toml)
ข้อจำกัดทางเทคนิคและข้อควรพิจารณา
- โครงสร้างออบเจ็กต์หลายระดับที่ซ้อนกันลึกอาจทำให้ข้อความยาวเกินไปเมื่อเทียบกับ YAML
- ไวยากรณ์สำหรับอาร์เรย์ของตาราง ([[table.array]]) อาจไม่เข้าใจได้ง่ายสำหรับผู้เริ่มต้น
- มีความหนาแน่นน้อยกว่า JSON สำหรับการแลกเปลี่ยนข้อมูล API แบบเครื่องต่อเครื่องที่มีปริมาณงานสูง
เกร็ดความรู้ทางเทคนิคที่น่าสนใจ
- TOML ถูกสร้างขึ้นโดย Tom Preston-Werner ผู้ซึ่งร่วมก่อตั้ง GitHub และสร้าง Gravatar รวมถึง SemVer (Semantic Versioning)
- แพ็กเกจ Cargo ใช้ Cargo.toml เพื่อประกาศเมทาดาทา การพึ่งพา และเป้าหมาย ส่วนโปรเจกต์ Rust ที่ใช้ระบบสร้างอื่นอาจใช้ไฟล์ต่างกัน
- ต่างจาก JSON ตรงที่ TOML รองรับความคิดเห็น (โดยใช้เครื่องหมาย '#') และสตริงหลายบรรทัดได้ในตัว
คำถามทางเทคนิคที่พบบ่อย
TOML ใช้ทำอะไร
TOML ใช้สำหรับการกำหนดค่าซอฟต์แวร์ โดยส่วนใหญ่จะพบใน Cargo.toml ของ Rust, pyproject.toml ของ Python, การตั้งค่า Go Hugo และเครื่องมือคอนเทนเนอร์
เหตุใดจึงนิยมใช้ TOML มากกว่า YAML สำหรับการกำหนดค่า
TOML หลีกเลี่ยงบั๊กการแยกวิเคราะห์กรณีเฉพาะที่ขึ้นชื่อของ YAML (เช่น คำว่า 'NO' ที่ไม่ได้ใส่เครื่องหมายคำพูดถูกแปลงเป็นค่าบูลีน false) และยังคงอ่านเข้าใจง่ายด้วยคอมเมนต์และตารางที่ชัดเจน
ฉันจะแปลง TOML เป็น JSON หรือ YAML ได้อย่างไร
คุณสามารถแปลงไฟล์ TOML เป็น JSON หรือ YAML ได้ทันทีโดยใช้ File2File.app บนเว็บเบราว์เซอร์ของคุณ
คู่การแปลงไฟล์ TOML ที่เกี่ยวข้อง
การแปลงไฟล์ตั้งค่า TOML เป็น JSON จะเปลี่ยนการตั้งค่าคุณสมบัติที่มนุษย์อ่านเข้าใจได้ให้เป็นออบเจ็กต์ข้อมูลที่มีรูปแบบเคร่งครัด ซึ่งแอปพลิเคชันเว็บสามารถแยกวิเคราะห์ได้ทันที
การแปลงไฟล์ตั้งค่า JSON เป็น TOML ช่วยให้แก้ไขได้ง่ายขึ้น พร้อมทั้งรักษาลำดับชั้นข้อมูลคีย์-ค่าแบบมีโครงสร้างไว้ครบถ้วน