YAML ถึง ตัวแปลง JSON
การแปลง YAML เป็น JSON ที่รวดเร็วและปลอดภัย เหมาะสำหรับไฟล์การกำหนดค่าและการวิเคราะห์ข้อมูล
การแปลง YAML เป็น JSON ที่รวดเร็วและปลอดภัย เหมาะสำหรับไฟล์การกำหนดค่าและการวิเคราะห์ข้อมูล
YAML และ JSON เป็นรูปแบบที่เกี่ยวข้องกันอย่างใกล้ชิด โดยทางเทคนิคแล้ว JSON นั้นเป็นชุดย่อยที่เข้มงวดของ YAML 1.2 และการแปลงระหว่างรูปแบบเหล่านี้มักจะตรงไปตรงมา YAML เพิ่มคุณสมบัติที่เป็นมิตรต่อมนุษย์ซึ่ง JSON ขาด: ความคิดเห็น สตริงหลายบรรทัดที่ไม่มีการ Escape การอ้างอิงจุดยึดและนามแฝง การอ้างอิงที่ยืดหยุ่นมากขึ้น และโครงสร้างตามการเยื้องที่มีลักษณะคล้ายกับเค้าโครงเอกสารทั่วไป สิ่งนี้ทำให้ YAML เป็นตัวเลือกยอดนิยมสำหรับไฟล์การกำหนดค่า (รายการ Kubernetes, เวิร์กโฟลว์ GitHub Actions, Docker Compose) ในขณะที่ JSON ครอบงำเพย์โหลด API
โดยทั่วไปการแปลง YAML เป็น JSON หมายถึงการละทิ้งคุณสมบัติพิเศษที่เป็นมิตรต่อมนุษย์ของ YAML เพื่อแลกกับรูปแบบที่เครื่องแยกวิเคราะห์ได้ง่ายขึ้น และนั่นคือภาษากลางของ HTTP API ความคิดเห็นถูกละทิ้ง (JSON ไม่มี) การอ้างอิงจุดยึดได้รับการแก้ไขเป็นค่าอ้างอิง สตริงหลายบรรทัดจะยุบเป็นสตริง JSON มาตรฐานที่มีการขึ้นบรรทัดใหม่แบบฝัง
ตัวแปลงนี้แยกวิเคราะห์ YAML โดยใช้ js-yaml ซึ่งเป็นไลบรารี YAML ที่ใช้กันอย่างแพร่หลายที่สุดใน JavaScript เอาต์พุตถูกสร้างขึ้นโดยใช้ JSON.stringify พร้อมการเยื้องเพิ่มเติม การแปลงจะจัดการไวยากรณ์ YAML 1.2 มาตรฐานทั้งหมด รวมถึงรูปแบบโฟลว์ สไตล์บล็อก สเกลาร์ ลำดับ การแมป จุดยึด นามแฝง และประเภทแท็กมาตรฐาน
API ส่วนใหญ่และสภาพแวดล้อมการเขียนโปรแกรมจำนวนมากคาดหวัง JSON ไฟล์การกำหนดค่าที่เขียนด้วย YAML จะต้องแปลงเป็น JSON เมื่อผสานรวมกับโค้ดหรือบริการที่ยอมรับเฉพาะ JSON เท่านั้น เครื่องมือสำหรับ JSON ยังมีอีกมากมาย: jq, JSON Path, JSON Schema และระบบนิเวศที่หลากหลายของเครื่องมือตรวจสอบความถูกต้องและหม้อแปลง ล้วนรับอินพุต JSON
JSON ก็ไม่คลุมเครือในลักษณะที่ YAML ไม่ใช่ ความยืดหยุ่นของ YAML สร้างความประหลาดใจในการแยกวิเคราะห์ - สตริงเช่น 'ไม่' แยกวิเคราะห์เป็นเท็จบูลีนใน YAML 1.1, สตริงเวอร์ชันแยกวิเคราะห์เป็นแบบลอยตัว, ข้อผิดพลาดในการเยื้องทำให้เกิดการเปลี่ยนแปลงโครงสร้างโดยไม่โต้ตอบ การแปลงเป็น JSON จะทำให้ข้อมูลค้างอยู่ในรูปแบบที่มีความกำกวมน้อยลง
วาง YAML รับ JSON
js-yaml ใช้ YAML 1.2 พร้อมการสนับสนุนเพิ่มเติมสำหรับลักษณะเฉพาะของ YAML 1.1 (ปัญหา 'no'-as-false เลขฐานแปดที่ไม่มีคำนำหน้า 0o) parser สร้างแผนผังอ็อบเจ็กต์ JavaScript โดยใช้ประเภทดั้งเดิม: ตัวเลข สตริง บูลีน ค่าว่าง อาร์เรย์ และอ็อบเจ็กต์ธรรมดา
JSON.stringify ทำให้แผนผังวัตถุเป็นอนุกรมเป็น JSON การเยื้องเสริมทำให้ได้งานพิมพ์ที่สวยงาม หากไม่มีผลลัพธ์ที่ได้คือ JSON บรรทัดเดียวขนาดกะทัดรัด ค่าพิเศษ (NaN, Infinity, ไม่ได้กำหนด) ไม่ใช่ JSON ที่ถูกต้อง ตัวแปลงจะบังคับให้เป็นโมฆะหากมีอยู่
กรณี Edge: การประทับเวลา YAML กลายเป็นสตริง ISO-8601 ใน JSON ข้อมูลไบนารี YAML (เข้ารหัส base64) จะกลายเป็นสตริง จุดยึดและนามแฝงได้รับการแก้ไขเป็นค่าที่ซ้ำกันใน JSON เนื่องจาก JSON ไม่มีไวยากรณ์อ้างอิง