ตัวแปลง JSON ↔ YAML
แปลง JSON เป็น YAML และแปลง YAML กลับเป็น JSON ได้ในเบราว์เซอร์ของคุณโดยตรง วางรูปแบบใดก็ได้เพื่อรับผลลัพธ์ที่สะอาดและจัดเยื้องอย่างถูกต้อง — เหมาะอย่างยิ่งสำหรับไฟล์คอนฟิก ไปป์ไลน์ CI และ Kubernetes manifest
การเยื้อง
ป้อนข้อมูลด้านบนเพื่อดูผลลัพธ์ที่แปลงแล้วตรงนี้
วิธีใช้ ตัวแปลง JSON เป็น YAML
- 1
เลือกทิศทาง
ใช้ปุ่มสลับเพื่อเลือก JSON เป็น YAML หรือ YAML เป็น JSON ปุ่มสลับจะย้ายผลลัพธ์ของคุณไปไว้ในช่องอินพุต เพื่อให้คุณแปลงกลับอีกทางได้
- 2
วางข้อมูลของคุณ
วาง JSON หรือ YAML ลงในช่องอินพุต การแปลงจะทำงานโดยอัตโนมัติขณะที่คุณพิมพ์ พร้อมคงโครงสร้าง การซ้อนชั้น และชนิดข้อมูลไว้ครบถ้วน
- 3
เลือกการเยื้อง
เลือกการเยื้องแบบ 2 หรือ 4 ช่องว่างให้เข้ากับสไตล์ของโปรเจกต์คุณ ผลลัพธ์จะสะอาดและจัดเยื้องอย่างถูกต้องไม่ว่าจะเป็นรูปแบบใด
- 4
คัดลอกผลลัพธ์
ตรวจดูผลลัพธ์ที่แปลงแล้วและคัดลอกไปยังคลิปบอร์ด พร้อมนำไปวางในไฟล์คอนฟิก ไปป์ไลน์ หรือโค้ดของคุณ
จาก JSON สู่ YAML: คอนฟิกที่สะอาดขึ้นโดยไม่ตกหลุมพราง
YAML เป็นซูเปอร์เซ็ตของ JSON
เอกสาร JSON ที่ถูกต้องทุกฉบับล้วนเป็น YAML ที่ถูกต้องด้วย — นี่คือสิ่งที่ข้อกำหนดของ YAML รับประกันไว้ ไม่ใช่เรื่องบังเอิญ YAML เพิ่มชั้นที่อ่านง่ายสำหรับมนุษย์ทับลงไป: แทนที่จะใช้วงเล็บปีกกาและวงเล็บเหลี่ยม โครงสร้างจะแสดงผ่านการเยื้อง แทนที่จะใช้จุลภาค แต่ละรายการจะอยู่บนบรรทัดของตัวเอง และต่างจาก JSON ตรงที่ YAML รองรับคอมเมนต์ ผลลัพธ์จึงอ่านเหมือนโครงร่างมากกว่ากองข้อมูล นี่คือเหตุผลที่ YAML ครองพื้นที่ของไฟล์คอนฟิก
เพราะแบบจำลองข้อมูลของทั้งสองสอดคล้องกันอย่างใกล้ชิด — ทั้งคู่มีแมป ซีเควนซ์ สตริง ตัวเลข บูลีน และ null — การแปลงระหว่างกันจึงเป็นกระบวนการตรงไปตรงมาและไม่สูญเสียค่าข้อมูลใด ๆ การแปลงเป็นเพียงการแสดงต้นไม้ข้อมูลชุดเดิมในไวยากรณ์พื้นผิวที่ต่างออกไป สิ่งเดียวที่รอดผ่านการแปลงไป-กลับของ JSON ไม่ได้คือคอมเมนต์ เพราะ JSON ไม่มีที่ให้วางมัน
การเยื้องคือไวยากรณ์
ใน YAML ช่องว่างไม่ใช่แค่เรื่องความสวยงาม — มันคือโครงสร้าง การซ้อนชั้นแสดงด้วยการเยื้องคีย์ลูกให้ลึกกว่าคีย์แม่ และรายการที่อยู่ในระดับความลึกเดียวกันต้องเยื้องเท่ากัน แมปที่ซ้อนอยู่ใต้คีย์จะกลายเป็นชุดของบรรทัดที่เยื้องเข้าไปอยู่ใต้คีย์นั้น ส่วนลิสต์จะกลายเป็นบรรทัดที่แต่ละบรรทัดขึ้นต้นด้วยขีดกลาง หากเยื้องผิด คุณก็เปลี่ยนความหมาย ไม่ใช่แค่หน้าตา ซึ่งตรงกันข้ามกับวิธีที่ JSON จัดการกับช่องว่าง
เลือกความกว้างของการเยื้องให้สม่ำเสมอ — 2 ช่องว่างคือค่าเริ่มต้นที่ใช้กันทั่วไปสำหรับไฟล์คอนฟิก ส่วน 4 ช่องว่างคือสไตล์ของบางองค์กร — แล้วใช้แบบเดียวกันทุกที่ ตัวแปลงนี้ให้ผลลัพธ์ที่เยื้องสะอาดและสม่ำเสมอ คุณจึงเริ่มต้นจากพื้นฐานที่ถูกต้องแทนที่จะต้องมานั่งจัดบรรทัดด้วยมือเอง
ห้ามใช้แท็บ
นี่คือกฎที่ดักแทบทุกคนในครั้งแรก ข้อกำหนดของ YAML ห้ามใช้อักขระแท็บสำหรับการเยื้องอย่างชัดเจน คุณต้องใช้ช่องว่างเท่านั้น เอดิเตอร์ที่ตั้งค่าให้แทรกแท็บเมื่อคุณกดปุ่ม Tab จะสร้างไฟล์ที่แยกวิเคราะห์ไม่ผ่านอย่างเงียบ ๆ และมักให้ข้อความแสดงข้อผิดพลาดที่ชี้ไปผิดจุด เพราะตัวแยกวิเคราะห์เพิ่งสังเกตว่าโครงสร้างพังก็ต่อเมื่อเลื่อนไปอีกหนึ่งหรือสองบรรทัดแล้ว
หากไฟล์ YAML ไม่ยอมโหลดทั้งที่การเยื้องดูถูกต้อง ให้ตรวจหาแท็บก่อนเป็นอันดับแรก ตั้งค่าเอดิเตอร์ของคุณให้แสดงช่องว่างหรือให้แปลงแท็บเป็นช่องว่างสำหรับไฟล์ YAML การแปลงจาก JSON เลี่ยงปัญหานี้ได้ทั้งหมด เพราะผลลัพธ์ที่สร้างออกมาเยื้องด้วยช่องว่างตั้งแต่ต้น
ปัญหา Norway และบูลีนที่โผล่มาแบบไม่คาดคิด
ตัวแยกวิเคราะห์ YAML รุ่นเก่าตีความคำเปล่า ๆ หลากหลายอย่างน่าตกใจว่าเป็นบูลีน: ไม่ใช่แค่ true และ false เท่านั้น แต่รวมถึง yes, no, on และ off ในรูปแบบตัวพิมพ์ใหญ่เล็กต่าง ๆ ด้วย หายนะคลาสสิกคือลิสต์ของรหัสประเทศที่รายการของนอร์เวย์ ซึ่งเขียนเป็นตัวอักษรเปล่า ๆ ว่า n และ o ถูกอ่านเป็นบูลีน false แล้วหายไปจากข้อมูลของคุณอย่างเงียบ ๆ แฟล็กแบบเปิด-ปิดที่เขียนว่า on หรือ off ก็พลิกชนิดข้อมูลได้ในแบบเดียวกัน
เกราะป้องกันคือการใส่เครื่องหมายอัญประกาศ สตริงใด ๆ ที่อาจถูกเข้าใจผิดว่าเป็นบูลีน ตัวเลข วันที่ หรือ null ควรครอบด้วยเครื่องหมายอัญประกาศ เพื่อให้ตัวแยกวิเคราะห์คงมันไว้เป็นข้อความ ตัวแยกวิเคราะห์สมัยใหม่ที่สร้างขึ้นรอบ ๆ สคีมาแบบปลอดภัยจะเข้มงวดกว่าและเกิดปัญหานี้ได้ยากกว่ามาก แต่นิสัยการใส่อัญประกาศให้กับสเกลาร์ที่กำกวมก็ยังคุ้มค่าที่จะรักษาไว้ โดยเฉพาะกับรหัสสั้น ๆ สตริงที่ดูคล้ายเลขเวอร์ชัน และอะไรก็ตามที่มาจากผู้ใช้
หลุมพรางสเกลาร์อื่น ๆ: ตัวเลข เลขศูนย์นำหน้า และ null
ค่าเปล่า ๆ อีกไม่กี่อย่างก็ทำคนแปลกใจได้ รหัสไปรษณีย์หรือหมายเลขชิ้นส่วนที่มีเลขศูนย์นำหน้าอาจถูกอ่านเป็นตัวเลขแล้วทำให้ศูนย์หายไป หรือถูกตีความเป็นเลขฐานแปดในตัวแยกวิเคราะห์บางตัว สตริงเลขเวอร์ชันอย่าง 1.20 อาจถูกแปลงเป็นตัวเลข 1.2 ทำให้ศูนย์ท้ายหายไป คำว่า null ค่าว่างเปล่า และเครื่องหมาย tilde เดี่ยว ๆ ล้วนหมายถึง null เช่นเดียวกับกับดักบูลีน วิธีแก้ก็เหมือนกัน: ใส่อัญประกาศให้กับอะไรก็ตามที่รูปแบบข้อความของมันมีความสำคัญ
เพราะเครื่องมือนี้แยกวิเคราะห์ด้วยสคีมาแบบปลอดภัย จึงโหลดเฉพาะชนิดข้อมูลมาตรฐานเท่านั้น และไม่สร้างออบเจกต์ตามอำเภอใจหรือเรียกใช้โค้ด การวาง YAML ที่ไม่น่าเชื่อถือจึงไม่สามารถรันสิ่งใดได้ นั่นทำให้การแปลงคาดเดาได้: สิ่งที่คุณได้กลับมาคือแมป ซีเควนซ์ และสเกลาร์ธรรมดา โดยไม่มีชนิดข้อมูลที่กำหนดเองแบบไม่คาดคิดลักลอบเข้ามาผ่านแท็ก
YAML อยู่ที่ไหนจริง ๆ
ความอ่านง่ายของ YAML ทำให้มันกลายเป็นภาษากลางของเครื่องมือด้านโครงสร้างพื้นฐานและ CI ไฟล์ Docker Compose, Kubernetes manifest, ไปป์ไลน์ของ GitHub Actions และ GitLab CI, playbook ของ Ansible และไฟล์คอนฟิกของแอปพลิเคชันนับไม่ถ้วนล้วนเป็น YAML ทั้งสิ้น ในทุกกรณีเหล่านี้ คอมเมนต์และ diff ที่สะอาดซึ่ง YAML เอื้อให้ คือข้อได้เปรียบที่แท้จริงเมื่อมนุษย์ต้องตรวจทานการเปลี่ยนแปลงคอนฟิกของระบบโปรดักชัน
ในทางกลับกัน JSON ยังคงเหมาะกว่าสำหรับการแลกเปลี่ยนข้อมูลระหว่างเครื่องกับเครื่องผ่าน API ซึ่งความเข้มงวดและการไม่ต้องสนใจช่องว่างของมันช่วยลดความกำกวม รูปแบบที่พบได้ทั่วไปคือการเขียนและแก้ไขด้วย YAML เพื่อความสบายของมนุษย์ แล้วแปลงเป็น JSON เมื่อเครื่องมือหรือปลายทางต้องการ — ซึ่งนี่แหละคือเหตุผลที่ตัวแปลงนี้ทำงานได้ทั้งสองทิศทาง
บล็อกสไตล์ โฟลว์สไตล์ และการอ่านผลลัพธ์
YAML สามารถแสดงข้อมูลชุดเดียวกันได้สองแบบ บล็อกสไตล์กระจายแมปและลิสต์ออกไปเป็นบรรทัดที่เยื้องเข้า และเป็นสิ่งที่คุณต้องการสำหรับคอนฟิกที่อ่านง่าย ส่วนโฟลว์สไตล์ใช้วงเล็บปีกกาและวงเล็บเหลี่ยมแบบในบรรทัดเดียว และดูเกือบจะเหมือน JSON เป๊ะ ๆ ซึ่งบางครั้งก็สะดวกสำหรับค่าสั้น ๆ กระชับ ๆ ที่ฝังอยู่ในเอกสารใหญ่ การรู้จักทั้งสองแบบช่วยให้คุณอ่าน YAML ที่คนอื่นเขียนได้โดยไม่สับสน
เมื่อคุณแปลงที่นี่ ให้วาง JSON เลือกความกว้างของการเยื้อง แล้วตรวจทานผลลัพธ์แบบบล็อกสไตล์ก่อนนำไปวางในที่เก็บโค้ด ทุกอย่างเกิดขึ้นภายในเบราว์เซอร์ของคุณ ความลับในไฟล์คอนฟิก — โทเคน สตริงการเชื่อมต่อ ชื่อโฮสต์ภายใน — จึงไม่เคยออกจากอุปกรณ์ของคุณ ทำให้ปลอดภัยที่จะแปลง manifest สำหรับการดีพลอยจริง ไม่ใช่แค่ตัวอย่างที่ตัดข้อมูลอ่อนไหวออกแล้ว
คำถามที่พบบ่อย
JSON กับ YAML ต่างกันอย่างไร
จะแปลง JSON เป็น YAML ได้อย่างไร
แปลง YAML กลับเป็น JSON ได้ไหม
การแยกวิเคราะห์ YAML ที่ไม่น่าเชื่อถือที่นี่ปลอดภัยหรือไม่
ข้อมูลของฉันถูกอัปโหลดไปยังเซิร์ฟเวอร์หรือไม่
เครื่องมือที่เกี่ยวข้อง
ทำงานต่อด้วยเครื่องมือที่มีประโยชน์เหล่านี้