ไม่ว่าคุณจะกำลังตั้งค่าแอปพลิเคชันเว็บ แลกเปลี่ยนข้อมูลระหว่างบริการ วิเคราะห์ข้อมูลที่ส่งออกจากสเปรดชีต หรืออ่าน API response คุณจะพบข้อมูลที่จัดเก็บในรูปแบบข้อความที่มีโครงสร้าง สี่รูปแบบที่พบบ่อยที่สุดคือ JSON, YAML, CSV และ XML
แต่ละรูปแบบถูกออกแบบด้วยเป้าหมายที่แตกต่างกัน และการเลือกที่ถูกต้องขึ้นอยู่กับกรณีการใช้งานของคุณ บทความนี้อธิบายว่าแต่ละรูปแบบคืออะไร หน้าตาเป็นอย่างไร เมื่อไหร่ควรใช้ และเปรียบเทียบกันอย่างไร
JSON — JavaScript Object Notation
JSON กลายเป็นรูปแบบแลกเปลี่ยนข้อมูลหลักบนเว็บ แม้จะมีชื่อเช่นนั้น มันเป็นอิสระจากภาษาและใช้ทุกที่
ตัวอย่างไวยากรณ์:
{
"name": "Alice Martin",
"age": 34,
"skills": ["Python", "SQL", "Docker"],
"address": {
"city": "Lyon",
"country": "France"
}
}
ลักษณะสำคัญ:
- คู่ key-value ด้วยไวยากรณ์ที่สะอาดและอ่านง่าย
- รองรับ string, number, boolean, array, object และ null
- ไม่อนุญาตให้มี comment ใน JSON มาตรฐาน
- ไวยากรณ์เข้มงวด — trailing comma และ single quote เป็นข้อผิดพลาด
กรณีใช้งานทั่วไป: REST API, ไฟล์ตั้งค่า (package.json, tsconfig.json), ฐานข้อมูล NoSQL (MongoDB), การแลกเปลี่ยนข้อมูลระหว่าง frontend และ backend
น่ารู้ ไวยากรณ์ที่เข้มงวดของ JSON เป็นทั้งจุดแข็งและจุดอ่อน มันทำให้การ parse น่าเชื่อถือและไม่กำกวม แต่ก็หมายความว่า comma ที่หายไปตัวเดียวหรือ trailing comma ที่เกินมาจะทำให้ไฟล์ทั้งหมดเสียหาย
YAML — YAML Ain't Markup Language
YAML ถูกออกแบบให้เป็นรูปแบบ serialization ข้อมูลที่มนุษย์อ่านได้ง่ายที่สุด ใช้การเยื้องแทนวงเล็บและเป็นที่นิยมเป็นพิเศษสำหรับไฟล์ตั้งค่า
ตัวอย่างไวยากรณ์:
name: Alice Martin
age: 34
skills:
- Python
- SQL
- Docker
address:
city: Lyon
country: France
ลักษณะสำคัญ:
- โครงสร้างตามการเยื้อง (ไม่มีวงเล็บหรือปีกกา)
- รองรับ comment ด้วย
# - รองรับ data type ทั้งหมดของ JSON และมากกว่า (วันที่, สตริงหลายบรรทัด)
- ไวต่อ whitespace — การเยื้องที่ไม่ถูกต้องทำให้ไฟล์เสียหาย
กรณีใช้งานทั่วไป: ไฟล์ Docker Compose, Kubernetes manifest, CI/CD pipeline (GitHub Actions, GitLab CI), Ansible playbook, การตั้งค่า Hugo/Jekyll
YAML เป็น superset ของ JSON หมายความว่าเอกสาร JSON ที่ถูกต้องก็เป็น YAML ที่ถูกต้องด้วย อย่างไรก็ตาม ความยืดหยุ่นของ YAML อาจเป็นดาบสองคม — การแปลงชนิดโดยปริยาย (เช่น yes ถูกตีความว่าเป็น boolean true หรือ 3.10 กลายเป็น 3.1) ทำให้เกิดบั๊กที่ลึกซึ้งมากมาย
CSV — Comma-Separated Values
CSV เป็นรูปแบบข้อมูลที่มีโครงสร้างที่ง่ายที่สุด จัดเก็บข้อมูลตารางเป็นข้อความธรรมดา แต่ละบรรทัดเป็นแถวและค่าคั่นด้วยเครื่องหมายจุลภาค (หรือบางครั้งเป็นเซมิโคลอน แท็บ หรือตัวคั่นอื่น)
ตัวอย่างไวยากรณ์:
name,age,city,country
Alice Martin,34,Lyon,France
Bob Dupont,28,Paris,France
Carol Smith,41,London,UK
ลักษณะสำคัญ:
- ง่ายมาก — แค่ข้อความกับตัวคั่น
- ไม่มี data type — ทุกอย่างเป็น string
- ไม่มีวิธีมาตรฐานในการแสดงข้อมูลซ้อน
- ไม่มีมาตรฐานสากลอย่างเป็นทางการ (RFC 4180 มีอยู่แต่ไม่ได้ถูกปฏิบัติตามอย่างทั่วถึง)
- ขนาดไฟล์เล็กมาก
กรณีใช้งานทั่วไป: ส่งออกสเปรดชีต, นำเข้า/ส่งออกฐานข้อมูล, วิเคราะห์ข้อมูล (pandas, R), แลกเปลี่ยนข้อมูลง่าย ๆ, ไฟล์ log
ความง่ายของ CSV เป็นทั้งจุดแข็งที่สุดและข้อจำกัดที่สุด เหมาะสมบูรณ์สำหรับข้อมูลตารางแบบแบนแต่ไม่สามารถแสดงโครงสร้างลำดับชั้นได้ กรณีพิเศษ (เครื่องหมายจุลภาคในค่า ฟิลด์หลายบรรทัด ปัญหาการเข้ารหัส) ทำให้การ parse ซับซ้อนกว่าที่เห็นแรก
XML — Extensible Markup Language
XML เป็นรูปแบบแลกเปลี่ยนข้อมูลหลักก่อนที่ JSON จะเข้ามาแทนที่ ใช้ไวยากรณ์แบบ tag คล้ายกับ HTML และรองรับคุณสมบัติที่ซับซ้อนเช่น schema, namespace และ transformation
ตัวอย่างไวยากรณ์:
<?xml version="1.0" encoding="UTF-8"?>
<person>
<name>Alice Martin</name>
<age>34</age>
<skills>
<skill>Python</skill>
<skill>SQL</skill>
<skill>Docker</skill>
</skills>
<address>
<city>Lyon</city>
<country>France</country>
</address>
</person>
ลักษณะสำคัญ:
- โครงสร้างแบบ tag ด้วย tag เปิดและปิด
- รองรับ attribute, namespace, schema (XSD) และ transformation (XSLT)
- รองรับ comment
- ยืดยาวมากเมื่อเทียบกับรูปแบบอื่น
- มาตรฐานที่กำหนดอย่างดีมากพร้อมการตรวจสอบที่เข้มงวด
กรณีใช้งานทั่วไป: SOAP web service, การเชื่อมต่อระดับองค์กร, รูปแบบเอกสาร (DOCX, SVG, RSS), ไฟล์ตั้งค่าในระบบนิเวศ Java/.NET, การแลกเปลี่ยนข้อมูลภาครัฐและการเงิน
XML ยืดยาวกว่า JSON หรือ YAML แต่ความสามารถในการตรวจสอบ schema ทำให้มันมีค่ามากในบริบทที่ความสมบูรณ์ของข้อมูลและสัญญาที่เป็นทางการระหว่างระบบมีความสำคัญ
เปรียบเทียบเคียงข้างกัน
| คุณสมบัติ | JSON | YAML | CSV | XML |
|---|---|---|---|---|
| การอ่านโดยมนุษย์ | ดี | ยอดเยี่ยม | ดี (ตาราง) | พอใช้ |
| ความยืดยาว | น้อย | น้อย | น้อยมาก | มาก |
| Comment | ไม่ | ใช่ | ไม่ | ใช่ |
| ข้อมูลซ้อน | ใช่ | ใช่ | ไม่ | ใช่ |
| ชนิดข้อมูล | พื้นฐาน | หลากหลาย | ไม่มี (ทั้งหมดเป็น string) | ผ่าน schema |
| การตรวจสอบ schema | JSON Schema | ไม่มีมาตรฐาน | ไม่ | XSD |
| ขนาดไฟล์ | เล็ก | เล็ก | เล็กที่สุด | ใหญ่ |
| ความเร็ว parse | เร็ว | ปานกลาง | เร็ว | ปานกลาง |
| โดเมนหลัก | Web API | ตั้งค่า DevOps | ข้อมูล/สเปรดชีต | องค์กร |
เมื่อไหร่ควรใช้อะไร
- เลือก JSON เมื่อสร้าง web API, จัดเก็บการตั้งค่าสำหรับโปรเจกต์ JavaScript/TypeScript หรือแลกเปลี่ยนข้อมูลระหว่างบริการ เป็นตัวเลือกเริ่มต้นสำหรับแอปพลิเคชันสมัยใหม่ส่วนใหญ่
- เลือก YAML เมื่อเขียนไฟล์ตั้งค่าที่มนุษย์จะอ่านและแก้ไขบ่อย ๆ ความอ่านง่ายและการรองรับ comment ทำให้เหมาะสมสำหรับ DevOps และ infrastructure-as-code
- เลือก CSV เมื่อทำงานกับข้อมูลตาราง นำเข้า/ส่งออกจากสเปรดชีตหรือฐานข้อมูล หรือเมื่อขนาดไฟล์ต้องเล็กที่สุด หลีกเลี่ยงสำหรับอะไรก็ตามที่เป็นลำดับชั้น
- เลือก XML เมื่อทำงานกับระบบองค์กร, SOAP API หรือบริบทที่ต้องการการตรวจสอบ schema อย่างเป็นทางการ ยังเป็นตัวเลือกที่ถูกต้องเมื่อต้องการ markup แบบ document-oriented (เช่น SVG หรือ RSS)
การแปลงระหว่างรูปแบบ
การแปลงระหว่างรูปแบบเหล่านี้เป็นงานทั่วไป สิ่งที่ต้องจำไว้:
- JSON เป็น YAML (และกลับกัน) มักไม่สูญเสียข้อมูลเพราะ YAML เป็น superset ของ JSON
- CSV เป็น JSON/YAML ทำงานได้ดีสำหรับข้อมูลแบบแบนแต่ต้องตัดสินใจเกี่ยวกับโครงสร้างสำหรับ output ที่ซ้อนกัน
- XML เป็น JSON อาจสูญเสียข้อมูล (attribute, namespace, ลำดับ) เพราะ JSON ไม่มีแนวคิดที่เทียบเท่า
- รูปแบบใดก็ตามเป็น CSV ทำงานได้เฉพาะเมื่อข้อมูลเป็นแบบแบนหรือสามารถแบนได้อย่างมีความหมาย
เคล็ดลับ เมื่อแปลงระหว่างรูปแบบ ให้ตรวจสอบ output เสมอ การแปลงอัตโนมัติอาจสูญเสียข้อมูลอย่างเงียบ ๆ โดยเฉพาะกับ XML attribute, YAML type coercion หรือกรณีพิเศษของ CSV encoding
เรียนรู้เพิ่มเติม
ToolK.io มีเครื่องมือฟรีสำหรับแปลงระหว่าง JSON, YAML, CSV และ XML จัดรูปแบบและตรวจสอบข้อมูลของคุณ และสำรวจบทช่วยสอนที่เกี่ยวข้องสำหรับการทำงานกับข้อมูลที่มีโครงสร้างในโปรเจกต์ของคุณ
