YAML กับ JSON แตกต่างกันอย่างไร

YAML และ JSON เป็น 2 รูปแบบการแปลงข้อมูลเป็นอนุกรมที่มีกลไกการแลกเปลี่ยนข้อมูลที่มนุษย์สามารถอ่านได้ โดยจะจัดรูปแบบข้อมูลในลักษณะที่ได้มาตรฐานสำหรับการแลกเปลี่ยนระหว่างแอปพลิเคชันซอฟต์แวร์ และยังให้ข้อความที่มนุษย์สามารถอ่านได้ด้วย ทั้ง 2 รูปแบบนี้จะแสดงข้อมูลเป็นคู่คีย์-ค่า JSON รองรับอ็อบเจกต์ข้อมูลในรูปแบบค่า ในขณะที่ YAML ไม่สามารถทำได้ แต่ YAML จะรองรับข้อมูลได้หลายประเภทกว่า และใช้ภาษาธรรมชาติในการรองรับการใช้งานของนักพัฒนาได้มากกว่า

อ่านเพิ่มเติมเกี่ยวกับ JSON »

การแสดงแทนข้อมูลของ YAML กับ JSON

ลักษณะที่ปรากฏและไวยากรณ์ของ JSON และ YAML มีความคล้ายคลึงกัน แต่แตกต่างกันเล็กน้อย

เมื่อดูคร่าวๆ รูปแบบ JSON มีลักษณะการนำเสนอข้อมูลเหมือนเครื่องจักรมากกว่า YAML ข้อความ JSON มีสัญลักษณ์เหล่านี้

  • วงเล็บปีกกาสำหรับอ็อบเจกต์
  • เครื่องหมายทวิภาคเพื่อแยกคู่คีย์-ค่า
  • วงเล็บเหลี่ยมสำหรับอาร์เรย์ 
  • เครื่องหมายคำพูดเพื่อครอบสตริง

JSON สร้างขึ้นจากชุดย่อยของ JavaScript ขนาดเล็ก ดังนั้น ไวยากรณ์ที่ใช้จะทำให้เอกสาร JSON มีลักษณะคล้ายกับโค้ดการเขียนโปรแกรม
 

รูปแบบ YAML แตกต่างจาก JSON เนื่องจากมีลักษณะเหมือนมนุษย์เขียนข้อมูลที่มีโครงสร้างลงบนกระดาษ YAML ได้รับการออกแบบมาโดยเฉพาะเพื่อให้มนุษย์อ่านง่ายขึ้น โดยจะใช้องค์ประกอบต่อไปนี้

  • การเยื้องเพื่อแสดงอ็อบเจกต์ 
  • เครื่องหมายทวิภาคเพื่อแยกคู่คีย์-ค่า
  • เครื่องหมายยัติภังค์สำหรับอาร์เรย์
  • เครื่องหมายแฮชเพื่อแสดงถึงความคิดเห็น

YAML เดิมถูกสร้างขึ้นเพื่อลดความซับซ้อนของ XML

ตัวอย่างเอกสารของ YAML กับ JSON

ต่อไปนี้คือตัวอย่างลักษณะเอกสารที่มีข้อมูลผลิตภัณฑ์เสื้อใน YAML และ JSON

YAML

JSON

ประเภท: เสื้อยืด

ราคา: 20.00

ไซส์:

  • S
  • M
  • L

   รีวิว: # หมายเหตุเกี่ยวกับรีวิว

  • ชื่อผู้ใช้: user1

         คะแนน: 4

         สร้าง_เมื่อ: 2023-04-19T12:30:00Z

  • ชื่อผู้ใช้: user2

         คะแนน: 5

         สร้าง_เมื่อ: 2023-05-02T15:00:00Z

{

  "product": {

    "type": "T-Shirt",

    "price": 20.00,

    "sizes": ["S", "M", "L"]

    "reviews": {

      { "username": "user1”, "rating": 4, "created_at": "2023-04-19T12:30:00Z" },

      { "username": "user2”, "rating": 5, "created_at": "2023-05-02T15:00:00Z" }

    }

  }

}

ความแตกต่างที่สำคัญระหว่าง YAML กับ JSON

เนื่องจากไวยากรณ์ของ YAML ถือว่าง่ายต่อการอ่าน ทำความเข้าใจ และเขียนไฟล์ YAML มากกว่า JSON โดยเฉพาะสำหรับผู้ที่ไม่ใช่นักพัฒนา ต่อไปเราจะพูดถึงความแตกต่างที่สำคัญอื่นๆ

ประเภทข้อมูล

รูปแบบ JSON รองรับประเภทข้อมูลต่อไปนี้

  • จำนวน
  • บูลีน
  • Null
  • สตริง
  • อาร์เรย์
  • อ็อบเจกต์ (การเก็บรวบรวมคู่คีย์-ค่าที่ซ้อนกัน)

รูปแบบ YAML รองรับประเภทข้อมูลแบบดั้งเดิมทั้งหมดในภาษาเขียนโปรแกรมแบบไดนามิกใดๆ ตัวอย่างเช่น รองรับการเก็บรวบรวมข้อมูลที่ซ้อนกันที่สร้างจากลำดับ (รายการ) สเกลาร์ (เช่น จำนวนและสตริง) และการแมป (คู่คีย์-ค่า) การรองรับนี้ช่วยให้คุณสามารถสร้างโครงสร้างข้อมูลที่ซับซ้อนขึ้นได้ 

การรองรับในตัว

JSON ถูกนำมาใช้กันอย่างแพร่หลายร่วมกับภาษาเขียนโปรแกรมมากมายที่แตกต่างกัน ตัวอย่างเช่น JavaScript มีการรองรับในตัวเพื่อแยก JSON ไลบรารีมาตรฐานของ Python มี JSON อยู่ด้วย และสร้างไลบรารี JSON ใน PHP 5.2 ในทำนองเดียวกัน ภาษายอดนิยมอื่นๆ อีกกว่า 50 ภาษารองรับ JSON ผ่านแพ็คเกจและไลบรารีต่างๆ

ในทางตรงกันข้าม ไม่มีภาษายอดนิยมที่รองรับ YAML ในตัว แต่นักพัฒนาต้องติดตั้งและใช้ไลบรารี ตัวแยก YAML ยอดนิยม 2 แบบคือ PyYAML สำหรับ Python และ LibYAML สำหรับ C 

การกำหนดเวอร์ชัน

คุณสามารถกำหนดเวอร์ชันทั้ง JSON และ YAML ผ่านซอฟต์แวร์การกำหนดเวอร์ชันเช่น Git ได้ อย่างไรก็ตาม คุณจะอ่านและทำความเข้าใจการเปลี่ยนแปลงในไฟล์ YAML ระหว่างเวอร์ชันได้ง่ายกว่า

ความคิดเห็น

ไม่มีการรองรับรูปแบบข้อมูล JSON สำหรับความคิดเห็น นักพัฒนาจะต้องกำหนดคู่คีย์-ค่าความคิดเห็นเป็นวิธีแก้ไข

ในไฟล์ YAML ความคิดเห็นจะอยู่หลังสัญลักษณ์แฮช

เมื่อใดที่ควรใช้ YAML หรือ JSON

ด้วยการสนับสนุนและการผสานรวมกับ JavaScript อย่างแพร่หลาย JSON เป็นรูปแบบการแปลงข้อมูลเป็นอนุกรมที่ได้รับความนิยมเพิ่มขึ้นสำหรับกรณีการใช้งานส่วนใหญ่ผ่าน YAML JSON มีการใช้งานอย่างกว้างขวางในการสื่อสารของซอฟต์แวร์แบบกระจาย แอปพลิเคชันบนเว็บ ไฟล์การกำหนดค่า และ API

ในขณะที่ YAML อาจดูเหมือนจะเป็นทางเลือกที่ดีกว่าในด้านการพิมพ์ข้อมูลและรูปแบบที่มนุษย์สามารถอ่านได้ JSON มักจะเป็นตัวเลือกที่ดีกว่าสำหรับความเข้ากันได้ข้ามระบบ เนื่องจากแอปพลิเคชันและบริการจำนวนมากแยกรูปแบบข้อมูล JSON อยู่แล้ว

ในอีกทางหนึ่ง YAML มีบทบาทโดดเด่นในด้านการประมวลผลเป็นพิเศษ เนื่องจากความสามารถในการอ่านและการรองรับความคิดเห็น โดยเฉพาะอย่างยิ่ง YAML เป็นรูปแบบการแปลงข้อมูลเป็นอนุกรมหลักสำหรับไฟล์การกำหนดค่าในระบบอัตโนมัติ, DevOps และเครื่องมือและบริการ Infrastructure as Code (IaC) ตัวอย่างเช่น YAML มักจะใช้ในไฟล์ Docker และ Kubernetes

นอกจากนี้ YAML ยังใช้ในการเขียนไฟล์การกำหนดค่าในข้อเสนอ Amazon Web Services (AWS) ต่อไปนี้ ได้แก่ AWS CloudFormation, AWS Serverless Application Model (AWS SAM) และ AWS CodeBuild

สรุปความแตกต่างระหว่าง YAML กับ JSON

 

JSON

YAML

คืออะไร

รูปแบบการแปลงข้อมูลเป็นอนุกรมเพื่อแลกเปลี่ยนข้อมูลที่มีโครงสร้างระหว่างแอปพลิเคชันและบริการซอฟต์แวร์ ให้ความสำคัญกับการใช้แอปพลิเคชันมากกว่าการใช้มนุษย์ 

รูปแบบการแปลงข้อมูลเป็นอนุกรมเพื่อแลกเปลี่ยนข้อมูลที่มีโครงสร้างระหว่างแอปพลิเคชันและบริการซอฟต์แวร์ ให้ความสำคัญกับการใช้มนุษย์มากกว่าการใช้แอปพลิเคชัน

กรณีการใช้งานหลัก

แพร่หลายในแพลตฟอร์ม ภาษา การสื่อสารบนซอฟต์แวร์แบบกระจาย แอปบนเว็บ ไฟล์การกำหนดค่า และ API

ไฟล์การกำหนดค่าในระบบอัตโนมัติ, DevOps และเครื่องมือและบริการ Infrastructure as Code (IaC)

ความสามารถในการอ่าน

ง่ายสุดๆ

ง่ายที่สุด

ประเภทข้อมูล

จำนวน, บูลีน, null, สตริง, อาร์เรย์ และอ็อบเจกต์

รองรับข้อมูลทุกประเภทผ่านการเก็บรวบรวมข้อมูลที่ซ้อนกันซึ่งประกอบด้วยลำดับ สเกลาร์ และการแมป

รองรับความคิดเห็น

ไม่ได้

ใช่

รองรับอ็อบเจกต์ข้อมูลเป็นค่า

ใช่

ไม่ได้

การจัดเวอร์ชัน

มี แต่ไม่ง่ายที่จะอ่านและทำความเข้าใจความแตกต่างระหว่างเวอร์ชันได้อย่างรวดเร็ว

มี และง่ายต่อการอ่านและทำความเข้าใจความแตกต่างระหว่างเวอร์ชันได้อย่างรวดเร็ว

AWS จะรองรับข้อกำหนดด้านความต้องการของ YAML และ JSON ของคุณได้อย่างไร

บริการผสานรวมข้อมูลทั้งหมดของ AWS สามารถประมวลผลไฟล์ JSON ได้ ต่อไปนี้คือบริการของ AWS ที่เกี่ยวข้องสามบริการ:

  • AWS Glue เป็นบริการผสานรวมข้อมูลแบบไม่ต้องใช้เซิร์ฟเวอร์ คุณสามารถใช้ AWS Glue เพื่อค้นพบ จัดเตรียม และรวมข้อมูลสำหรับการวิเคราะห์ แมชชีนเลิร์นนิง และการพัฒนาแอปพลิเคชัน
  • Amazon Simple Queue Service (Amazon SQS) เป็นบริการจัดการลำดับข้อความแบบเต็มรูปแบบ คุณสามารถใช้เพื่อส่ง จัดเก็บ และรับข้อความระหว่างส่วนประกอบซอฟต์แวร์ได้ทุกระดับปริมาณ ข้อความ Amazon SQS มีข้อมูลที่เป็นข้อความซึ่งรวมถึง XML JSON และข้อความที่ไม่จัดรูปแบบได้สูงสุด 256 KB
  • Amazon DocumentDB (พร้อมฟังก์ชันการทำงานร่วมกับ MongoDB) เป็นฐานข้อมูลแบบโครงสร้างเอกสาร JSON แบบดั้งเดิมที่มีการจัดการเต็มรูปแบบ Amazon DocumentDB ทำให้การใช้งานเวิร์กโหลดเอกสารที่สำคัญทำได้ง่ายและคุ้มค่าในทุกขนาดโดยไม่ต้องจัดการโครงสร้างพื้นฐาน

ในทำนองเดียวกัน เครื่องมือสำหรับนักพัฒนาบน AWS รองรับไฟล์ YAML ในบริการการนำไปใช้จริงหลายรายการ ยกตัวอย่าง 2 บริการดังนี้

  • AWS Step Functions ช่วยให้คุณสามารถสร้างเวิร์กโฟลว์แบบไม่ต้องใช้เซิร์ฟเวอร์ที่ยืดหยุ่นได้โดยใช้บริการ AWS เช่น AWS Lambda, Amazon Simple Notification Service (Amazon SNS) และ Amazon DynamoDB Step Functions ยังรองรับคำจำกัดความเครื่องสถานะ YAML ทำให้สามารถกำหนดเวิร์กโฟลว์ในภาษาเดียวกับ Infrastructure as Code (IaC) ได้
  • AWS App2Container เป็นเครื่องมือบรรทัดคำสั่งที่คุณสามารถใช้เพื่อโอนย้ายและปรับแอปพลิเคชันบนเว็บ Java และ .NET ให้ทันสมัยในรูปแบบคอนเทนเนอร์ โดยจะสร้างไฟล์ YAML สำหรับคำจำกัดความของงาน Amazon Elastic Container Service (Amazon ECS) และการนำ Kubernetes ไปใช้จริง นอกจากนี้ยังเป็นไปตามแนวทางปฏิบัติที่ดีที่สุดของ AWS สำหรับการรักษาความปลอดภัยและความสามารถในการปรับขนาด

เริ่มต้นใช้งาน YAML และ JSON บน AWS โดยการสร้างบัญชีวันนี้