การตั้งค่า TOML (.toml)

TOML มาตรฐาน

Tom's Obvious Minimal Language (TOML) คือรูปแบบการกำหนดค่าที่ชัดเจนและมุ่งเน้นมนุษย์เป็นศูนย์กลาง สร้างขึ้นโดย Tom Preston-Werner ผู้ร่วมก่อตั้ง GitHub ซึ่งได้รับการยอมรับอย่างแพร่หลายในระบบนิเวศการเขียนโปรแกรมสมัยใหม่ เช่น Rust (Cargo) และ Python (pyproject.toml)

แปลง TOML เป็น JSON

ตัวแปลงจาก TOML เป็น JSON ฟรีในเบราว์เซอร์ แปลงไฟล์ได้ทันทีบนอุปกรณ์ของคุณ

ตรวจสอบและดู Metadata

ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ TOML โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:

เลือกหรือวางไฟล์ที่นี่

การแปลงไฟล์แบบส่วนตัว 100% ในเบราว์เซอร์ - ไฟล์จะไม่ rời ออกจากอุปกรณ์ของคุณ

หรือวาง Ctrl+V
การรับประกันความเป็นส่วนตัวแบบไม่มีการส่งผ่านเครือข่าย: อัปโหลด 0 ไบต์ไปยังเซิร์ฟเวอร์ภายนอก การประมวลผลทั้งหมดเกิดขึ้นภายในแซนด์บ็อกซ์ของเบราว์เซอร์ของคุณ

ลายเซ็นส่วนหัวในระดับไบต์ (Magic Bytes)

ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ TOML โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:

ลายเซ็น HEX (OFFSET 0):

5B ... 5D

การแสดงผลรูปแบบ ASCII: [...]

มาตรฐาน: TOML v1.0.0 Specification

ข้อมูลจำเพาะทางเทคนิค

สถาปัตยกรรมคอนเทนเนอร์Human-readable configuration file mapping unequivocally to a hash table, structured with [tables] and key = value pairs
การบีบอัดUncompressed text stream
การจัดลำดับไบต์ (Byte Endianness)UTF-8 text stream
พื้นที่สีN/A (Configuration File)
ช่องสัญญาณและโครงสร้างTables, arrays of tables, inline tables, strings, integers, floats, booleans, and RFC 3339 datetimes
ขนาดสูงสุดUnbounded text length
ความโปร่งใสNone
การสตรีมและแบบโปรเกรสซีฟSequential line-by-line configuration parsing

ตารางเปรียบเทียบทางเทคนิค: TOML กับคู่แข่ง

คุณลักษณะทางเทคนิคTOML (ปัจจุบัน)YAMLJSONINI
ความเสี่ยงจากความคลุมเครือศูนย์ (ข้อกำหนดชัดเจนอย่างเคร่งครัด)สูง (บั๊กค่าบูลีน 'ปัญหาจอร์เวย์' ของ YAML)ศูนย์ (ประเภทข้อมูลที่เข้มงวด)ปานกลาง (ไม่มีมาตรฐานที่เป็นทางการ)
ประเภทข้อมูลวันที่และเวลาแบบเนทีฟรองรับวันที่และเวลาตามมาตรฐาน RFC 3339 แบบเนทีฟการแยกวิเคราะห์สตริง / วันที่โดยนัยไม่มี (มีแต่สตริง)ไม่มี (มีแต่สตริง)
การรองรับความคิดเห็นแบบเนทีฟ (ความคิดเห็นแบบ #)แบบเนทีฟ (ความคิดเห็นแบบ #)ไม่อนุญาตให้มีความคิดเห็นแบบเนทีฟ (ความคิดเห็นแบบ ; และ #)
ระบบนิเวศหลักRust (Cargo), Python (PEP 518), GoKubernetes, Ansible, ท่อส่ง CI/CDเว็บ API, การสื่อสารในเบราว์เซอร์Windows รุ่นเก่า, การกำหนดค่า Git

รูปแบบความเสียหายทั่วไปและคู่มือการกู้คืน Hex

ข้อผิดพลาดของตัวแยกวิเคราะห์: 'Duplicate key in table' หรือ 'Invalid table header'

สาเหตุหลัก: พยายามกำหนดคีย์หรือเนมสเปซของตารางที่มีอยู่แล้วซ้ำภายในเอกสาร

การกู้คืน: ตรวจสอบความถูกต้องและจัดรูปแบบไวยากรณ์ TOML ใหม่โดยใช้ตัวจัดรูปแบบ TOML ของ File2File

การวิเคราะห์ความปลอดภัยและเวกเตอร์การโจมตีตัวแยกวิเคราะห์

ตัวแยกวิเคราะห์ TOML ต้องป้องกันมลพิษของต้นแบบ (prototype pollution) และการใช้ CPU จนหมดสิ้นจากการซ้อนอาร์เรย์ตารางที่ผิดปกติ

เวกเตอร์การโจมตีที่ทราบ

  • มลพิษของต้นแบบในตัวแยกวิเคราะห์ JavaScript TOML ที่ฉีดคุณสมบัติเข้าไปใน Object.prototype
  • การปฏิเสธการให้บริการผ่านการประกาศอาร์เรย์ตารางที่ซ้อนกันลึก
  • การจัดสรรหน่วยความจำที่ไม่จำกัดในระหว่างการแยกวิเคราะห์อาร์เรย์แบบอินไลน์ขนาดใหญ่

แนวทางปฏิบัติที่ดีที่สุดในการป้องกัน:

ประวัติความเป็นมาและเหตุการณ์สำคัญ

2021TOML v1.0.0 เปิดตัวอย่างเป็นทางการ โดยล็อกสเปกไชันไวยากรณ์หลักให้คงที่
2018Python กำหนดมาตรฐาน 'pyproject.toml' (PEP 518) เป็นมาตรฐานการกำหนดค่าการคอมไพล์สมัยใหม่
2013Tom Preston-Werner เผยแพร่ TOML เพื่อให้มีรูปแบบการกำหนดค่าที่สะอาดปราศจากความซับซ้อนของ YAML

ข้อได้เปรียบและจุดเด่นสำคัญ

  • ไร้ความคลุมเครือโดยสิ้นเชิง: จับคู่กับตารางแฮชได้อย่างสะอาดและคาดเดาได้ โดยไม่มีการแปลงประเภทข้อมูลที่น่าประหลาดใจ
  • รองรับวันที่และเวลาแบบเนทีฟระดับเฟิร์สต์คลาส (การประทับเวลา, วันที่, และเวลาตามมาตรฐาน RFC 3339) โดยไม่ต้องหลีกเลี่ยงอักขระ (escaping)
  • ถูกนำมาใช้เป็นรูปแบบการกำหนดค่ามาตรฐานอย่างเป็นทางการสำหรับเครื่องมือภาษาสัยใหม่ (Rust Cargo.toml, Python pyproject.toml)

ข้อจำกัดทางเทคนิคและข้อควรพิจารณา

  • โครงสร้างออบเจ็กต์หลายระดับที่ซ้อนกันลึกอาจทำให้ข้อความยาวเกินไปเมื่อเทียบกับ YAML
  • ไวยากรณ์สำหรับอาร์เรย์ของตาราง ([[table.array]]) อาจไม่เข้าใจได้ง่ายสำหรับผู้เริ่มต้น
  • มีความหนาแน่นน้อยกว่า JSON สำหรับการแลกเปลี่ยนข้อมูล API แบบเครื่องต่อเครื่องที่มีปริมาณงานสูง

เกร็ดความรู้ทางเทคนิคที่น่าสนใจ

  • TOML ถูกสร้างขึ้นโดย Tom Preston-Werner ผู้ซึ่งร่วมก่อตั้ง GitHub และสร้าง Gravatar รวมถึง SemVer (Semantic Versioning)
  • ไฟล์ 'Cargo.toml' ในโปรเจกต์ Rust ทุกโปรเจกต์จะระบุการพึ่งพาแพ็คเกจและแฟล็กตัวคอมไพล์ทั้งหมดในรูปแบบ TOML
  • ต่างจาก 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 บนเว็บเบราว์เซอร์ของคุณ