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

TOML มาตรฐาน

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

แปลง TOML เป็น JSON

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

ตรวจสอบไฟล์และข้อมูลเมตา

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

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

เป็นส่วนตัว - ไฟล์จะไม่ออกจากอุปกรณ์ของคุณ

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

ลายเซ็นส่วนหัวระดับไบต์

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

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

5B ... 5D

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

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

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

สถาปัตยกรรมคอนเทนเนอร์ไฟล์กำหนดค่าที่อ่านเข้าใจง่ายและแมปกับตารางแฮชอย่างชัดเจน จัดโครงสร้างด้วย [tables] และคู่ key = value
การบีบอัดสตรีมข้อความแบบไม่บีบอัด
การจัดลำดับไบต์สตรีมข้อความ UTF-8
พื้นที่สีไม่เกี่ยวข้อง (ไฟล์กำหนดค่า)
ช่องสัญญาณและโครงสร้างตาราง, อาร์เรย์ของตาราง, ตารางในบรรทัด, สตริง, จำนวนเต็ม, จำนวนทศนิยม, ค่าบูลีน และวันเวลาตาม RFC 3339
ขนาดสูงสุดความยาวข้อความไม่จำกัด
ความโปร่งใสไม่มี
การสตรีมและแบบโปรเกรสซีฟแยกวิเคราะห์ไฟล์กำหนดค่าตามลำดับทีละบรรทัด

ตารางเปรียบเทียบทางเทคนิค: 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.app

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

ตัวแยกวิเคราะห์ TOML ต้องป้องกันการปนเปื้อนพร็อตโทไทป์และการใช้ CPU จนเต็มจากการซ้อนอาร์เรย์ของตารางในรูปแบบที่ผิดปกติ

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

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

แนวทางปฏิบัติที่ดีที่สุดในการป้องกัน: ตรวจสอบขีดจำกัดการซ้อนตาราง และใช้ออบเจ็กต์พจนานุกรมที่ป้องกันการปนเปื้อนพร็อตโทไทป์

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

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

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

  • ไม่มีความคลุมเครือโดยสิ้นเชิง: จัดเก็บข้อมูลลงในตารางแฮชได้อย่างตรงไปตรงมาและคาดเดาได้ โดยไม่มีการแปลงชนิดข้อมูลที่ไม่คาดคิด
  • รองรับวันที่และเวลาโดยตรงเป็นความสามารถพื้นฐาน (วัน เวลา และการประทับเวลาตาม 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 บนเว็บเบราว์เซอร์ของคุณ