วิธีแปลง JSON เป็น YAML
- วาง JSON หรือเปิดไฟล์ YAML จะแสดงขึ้นขณะที่คุณพิมพ์ เลือกการเยื้อง 2 หรือ 4 ช่องว่าง
- หากต้องการแปลงย้อนกลับ ให้สลับทิศทางเป็น YAML → JSON แล้ววาง YAML
- คัดลอกผลลัพธ์หรือดาวน์โหลดเป็นไฟล์
.yamlหรือ.json
JSON vs YAML ต่างกันอย่างไร
| JSON | YAML | |
|---|---|---|
| โครงสร้าง | วงเล็บปีกกา {} และวงเล็บเหลี่ยม [] | การเยื้องและรายการแบบ - |
| สตริง | อยู่ในเครื่องหมายคำพูดคู่เสมอ | ใส่เครื่องหมายคำพูดเฉพาะเมื่อจำเป็น |
| คอมเมนต์ | ไม่อนุญาต | # comment |
| ข้อความหลายบรรทัด | escape แบบ \n | literal block ด้วย | |
| การใช้งานทั่วไป | API และการแลกเปลี่ยนข้อมูล | ไฟล์คอนฟิก |
YAML 1.2 เป็น superset ของ JSON เอกสาร JSON จึงเป็น YAML ที่ถูกต้องอยู่แล้ว แต่ตัวแปลงจะเขียนในรูปแบบ block ที่อ่านง่ายกว่าแทน
ค่าที่ต้องใส่เครื่องหมายคำพูดใน YAML
คำบางคำที่ไม่มีเครื่องหมายคำพูดจะเปลี่ยนชนิดข้อมูลใน YAML: yes, no, on และ off เป็น boolean ใน parser ของ YAML 1.1, 007 และ 1e3 เป็นตัวเลข และ null หรือ ~ หมายถึง null นี่คือ “ปัญหานอร์เวย์” (Norway problem) ที่โด่งดัง: รหัสประเทศ NO กลายเป็น false เมื่อไม่ได้ใส่เครื่องหมายคำพูด ตัวแปลงจะใส่เครื่องหมายคำพูดให้สตริงเหล่านี้โดยอัตโนมัติ YAML ที่ได้จึงอ่านกลับมาเป็นข้อมูลชุดเดิมทุกประการ
YAML ที่รองรับสำหรับ YAML → JSON
parser เข้าใจ YAML ที่ใช้ในไฟล์คอนฟิกและ API: block mapping และลิสต์ สตริงแบบธรรมดา แบบเครื่องหมายคำพูดเดี่ยวและคู่ บล็อกหลายบรรทัดแบบ | และ > คอลเลกชันแบบ inline [ ] และ { } คอมเมนต์ และตัวคั่นเอกสาร --- ส่วน anchor (&), alias (*) และแท็กแบบกำหนดเองจะถูกรายงานว่าไม่รองรับ พร้อมเลขบรรทัด สำหรับไฟล์ที่มีหลายเอกสาร จะแปลงเฉพาะเอกสารแรกเท่านั้น
คำถามที่พบบ่อย
YAML เป็น superset ของ JSON หรือไม่?
YAML 1.2 ถูกออกแบบให้เป็น superset ของ JSON ไฟล์ JSON แทบทุกไฟล์จึงเป็น YAML ที่ถูกต้องด้วย แต่ในทางกลับกันไม่เป็นเช่นนั้น: YAML มีคอมเมนต์ anchor และบล็อกหลายบรรทัดที่ JSON ไม่มี
คอมเมนต์จะถูกเก็บไว้เมื่อแปลง YAML เป็น JSON หรือไม่?
ไม่ JSON ไม่มีคอมเมนต์ คอมเมนต์จึงถูกตัดทิ้ง แต่คีย์ ค่า และลำดับของคีย์จะถูกเก็บไว้ครบถ้วน
ทำไม YAML ของฉันถึงไม่ผ่าน?
สาเหตุที่พบบ่อยคือใช้แท็บในการเยื้อง (YAML อนุญาตเฉพาะช่องว่าง) รายการในลิสต์หรือ mapping เดียวกันไม่ได้เริ่มที่คอลัมน์เดียวกัน และไม่มีช่องว่างหลังโคลอน ข้อความแจ้งข้อผิดพลาดจะบอกบรรทัดที่มีปัญหา
ค่าใน YAML ถูกกำหนดชนิดใน JSON อย่างไร?
เป็นไปตาม core schema ของ YAML 1.2: true/false กลายเป็น boolean, null และ ~ กลายเป็น null และตัวเลขธรรมดากลายเป็นตัวเลข JSON ส่วนคำอย่าง yes ยังคงเป็นสตริง ใส่เครื่องหมายคำพูดให้รหัสอย่าง "007" ใน YAML เพื่อเก็บไว้เป็นข้อความ