JSON, YAML, CSV: ควรใช้แบบไหนเมื่อไหร่ และวิธีแปลงระหว่างกัน
คุณดาวน์โหลดชุดข้อมูลมาและมันเป็น CSV API ของคุณส่งกลับ JSON ไฟล์ค่ากำหนดของคุณเป็น YAML เพื่อนร่วมงานส่งไฟล์ JSON มาให้และขอให้แปลงเป็นสเปรดชีต เพื่อนร่วมงานอีกคนให้ค่ากำหนด YAML และคุณต้องการ JSON สำหรับเครื่องมืออื่น
การแปลงรูปแบบข้อมูลเป็นงานที่ดูเหมือนง่ายจนกว่าคุณจะต้องทำจริง การเข้าใจว่าควรใช้รูปแบบไหนเมื่อไหร่ และวิธีย้ายข้อมูลระหว่างรูปแบบ ช่วยประหยัดเวลาได้จริง
สามรูปแบบในมุมมองรวดเร็ว
JSON (JavaScript Object Notation)
{
"name": "Alice",
"age": 30,
"skills": ["Python", "SQL", "Docker"],
"address": {
"city": "Berlin",
"country": "Germany"
}
}
คืออะไร: รูปแบบข้อความสำหรับข้อมูลที่มีโครงสร้าง รองรับ object (คู่คีย์-ค่า), array (รายการเรียงลำดับ), สตริง, ตัวเลข, boolean และ null
จุดแข็ง: เครื่องอ่านได้ง่าย รองรับทุกภาษาโปรแกรม จัดการข้อมูลซ้อนกันได้เป็นธรรมชาติ ไวยากรณ์เข้มงวดป้องกันความกำกวม
จุดอ่อน: ยืดยาว (วงเล็บปีกกา วงเล็บเหลี่ยม และเครื่องหมายคำพูดมาก) อ่านง่ายน้อยกว่า YAML ไม่รองรับคอมเมนต์
YAML (YAML Ain't Markup Language)
name: Alice
age: 30
skills:
- Python
- SQL
- Docker
address:
city: Berlin
country: Germany
คืออะไร: รูปแบบการจัดลำดับข้อมูลที่เป็นมิตรกับมนุษย์ ใช้การเยื้องแทนวงเล็บปีกกาและวงเล็บเหลี่ยม เป็น superset ของ JSON หมายความว่า JSON ที่ถูกต้องก็เป็น YAML ที่ถูกต้องด้วย
จุดแข็ง: อ่านง่ายมาก รองรับคอมเมนต์ สัญญาณรบกวนทางสายตาน้อย เหมาะสำหรับไฟล์ค่ากำหนด
จุดอ่อน: ไวต่อการเยื้อง (พังง่ายถ้าเว้นวรรคผิด) มีพฤติกรรมการแปลค่าที่น่าประหลาดใจบางอย่าง แปลค่าช้ากว่า JSON
CSV (Comma-Separated Values)
name,age,city,country
Alice,30,Berlin,Germany
Bob,25,London,UK
Charlie,35,Paris,France
คืออะไร: รูปแบบข้อความแบบแบนที่แต่ละบรรทัดคือแถวหนึ่ง และค่าในแถวคั่นด้วยเครื่องหมายจุลภาค (หรือบางครั้งเป็นอัฒภาคหรือแท็บ)
จุดแข็ง: ใช้ได้ทุกที่ (ทุกสเปรดชีต ฐานข้อมูล และเครื่องมือข้อมูลรองรับ) กะทัดรัดสำหรับข้อมูลแบบตาราง อ่านและสร้างง่าย
จุดอ่อน: ไม่รองรับข้อมูลซ้อนกัน ไม่มีชนิดข้อมูล (ทุกอย่างเป็นสตริง) ไม่มีมาตรฐานสำหรับอักขระพิเศษ จำกัดเฉพาะตารางแบบแบน
รู้หรือไม่? YAML เป็น superset ของ JSON ในทางเทคนิค หมายความว่าเอกสาร JSON ที่ถูกต้องทุกฉบับก็เป็นเอกสาร YAML ที่ถูกต้องโดยอัตโนมัติ คุณสามารถวาง JSON ลงในตัวแปลค่า YAML และมันจะทำงานได้ แต่กลับกันไม่ได้ — ฟีเจอร์ของ YAML (คอมเมนต์, anchor, สตริงหลายบรรทัด) ไม่มีสิ่งเทียบเท่าใน JSON
ควรใช้แบบไหนเมื่อไหร่
| กรณีการใช้งาน | รูปแบบที่ดีที่สุด | เหตุผล |
|---|---|---|
| คำขอและการตอบกลับ API | JSON | มาตรฐานอุตสาหกรรม ทุกภาษารองรับแบบ native |
| ไฟล์ค่ากำหนด | YAML | อ่านง่าย รองรับคอมเมนต์สำหรับเอกสารประกอบ |
| ข้อมูลสเปรดชีต | CSV | เปิดใน Excel, Google Sheets ฯลฯ ได้โดยตรง |
| ส่งออกจากฐานข้อมูล | CSV | ข้อมูลตารางแบบแบนแมปกับแถวและคอลัมน์โดยตรง |
| ข้อมูลซ้อนกันซับซ้อน | JSON หรือ YAML | CSV ไม่สามารถแสดงการซ้อนได้ |
| แลกเปลี่ยนข้อมูลระหว่างระบบ | JSON | แปลค่าไม่กำกวม ข้อกำหนดเข้มงวด |
| ค่ากำหนดที่มนุษย์แก้ไข | YAML | อ่านและแก้ไขด้วยมือง่ายกว่า |
| รายการข้อมูลง่ายๆ | CSV | เบา ไม่มีค่าใช้จ่ายเพิ่มเติม |
การแปลงระหว่างรูปแบบ
JSON เป็น YAML
นี่คือการแปลงค่ากำหนดที่พบบ่อยที่สุด คุณมี JSON config จากเครื่องมือหนึ่งและต้องการ YAML สำหรับอีกเครื่องมือ การแปลงตรงไปตรงมาเพราะ YAML รองรับทุกอย่างที่ JSON มี
{"server": {"host": "0.0.0.0", "port": 8080}}
กลายเป็น:
server:
host: 0.0.0.0
port: 8080
YAML เป็น JSON
การแปลง YAML เป็น JSON ก็ง่ายเช่นกัน แต่คุณจะสูญเสียคอมเมนต์ (JSON ไม่รองรับ) และผลลัพธ์จะยืดยาวกว่า
JSON เป็น CSV
วิธีนี้ทำงานได้ดีสำหรับ JSON array แบบแบน (array ของ object ที่มี key เหมือนกัน) แต่ละ object จะกลายเป็นแถว และแต่ละ key จะกลายเป็นหัวคอลัมน์
[
{"name": "Alice", "age": 30},
{"name": "Bob", "age": 25}
]
กลายเป็น:
name,age
Alice,30
Bob,25
คำเตือน การแปลง JSON เป็น CSV จะมีปัญหาเมื่อ JSON มี object หรือ array ซ้อนกัน CSV เป็นแบบแบน — ไม่มีทางแสดง array "skills" หรือ object "address" ที่ซ้อนกัน ข้อมูลซ้อนกันต้องถูกทำให้แบน (address.city, address.country เป็นคอลัมน์แยก) หรือแปลงเป็นสตริงภายในเซลล์ CSV
CSV เป็น JSON
แต่ละแถวจะกลายเป็น object โดยหัวคอลัมน์เป็น key เหมาะสำหรับข้อมูลตารางง่ายๆ
CSV เป็น YAML
พบน้อยกว่า แต่ใช้ตรรกะเดียวกัน: แต่ละแถวจะกลายเป็น YAML mapping และไฟล์ทั้งหมดจะกลายเป็น YAML sequence
ข้อผิดพลาดที่พบบ่อย
ปัญหาการเข้ารหัส CSV
ไฟล์ CSV สามารถใช้การเข้ารหัสตัวอักษรที่แตกต่างกัน (UTF-8, Latin-1, Windows-1252) หากคุณเปิด CSV แล้วเห็นตัวอักษรเพี้ยนเช่น "München" แทน "München" นั่นคือการเข้ารหัสไม่ตรงกัน ใช้ UTF-8 เสมอเมื่อเป็นไปได้
ความสับสนเรื่องตัวคั่น CSV
CSV ไม่ได้ใช้เครื่องหมายจุลภาคทั้งหมด CSV ในยุโรปมักใช้อัฒภาคเพราะเครื่องหมายจุลภาคถูกใช้เป็นตัวคั่นทศนิยมในรูปแบบตัวเลขยุโรปหลายแห่ง ค่าคั่นด้วยแท็บ (TSV) เป็นอีกรูปแบบหนึ่งที่พบบ่อย
ข้อผิดพลาดการเยื้อง YAML
YAML ใช้การเยื้อง (เว้นวรรค ห้ามใช้แท็บ) เพื่อกำหนดโครงสร้าง การเยื้องที่ไม่สม่ำเสมอ หรือการผสมแท็บกับเว้นวรรค ทำให้เกิดข้อผิดพลาดในการแปลค่าหรือตีความผิดโดยไม่แจ้งเตือน ใช้เว้นวรรค 2 ตัวต่อระดับการเยื้อง และตั้งค่าตัวแก้ไขให้ใส่เว้นวรรคแทนแท็บ
คำเตือน ใน YAML สตริง no จะถูกแปลค่าเป็น boolean false และ yes จะถูกแปลค่าเป็น true สตริง 1.0 จะถูกแปลค่าเป็นตัวเลข หากคุณหมายถึงสตริงตัวอักษร "no," "yes," หรือ "1.0" คุณต้องใส่เครื่องหมายคำพูด: "no", "yes", "1.0" นี่เป็นหนึ่งในกับดักที่โด่งดังที่สุดของ YAML
เครื่องหมายจุลภาคต่อท้ายใน JSON
JSON ไม่อนุญาตเครื่องหมายจุลภาคต่อท้าย สิ่งนี้ถูกต้องใน JavaScript แต่ไม่ถูกต้องใน JSON:
{"name": "Alice", "age": 30,} // JSON ไม่ถูกต้อง: เครื่องหมายจุลภาคต่อท้าย
ประสิทธิภาพไฟล์ขนาดใหญ่
สำหรับชุดข้อมูลขนาดใหญ่มาก (หลายล้านแถว) CSV มีประสิทธิภาพมากกว่า JSON หรือ YAML เพราะมีค่าใช้จ่ายเพิ่มเติมน้อยต่อระเบียน JSON เพิ่มวงเล็บปีกกาและเครื่องหมายคำพูดสำหรับทุกค่า ซึ่งเพิ่มขนาดไฟล์อย่างมากสำหรับข้อมูลตารางขนาดใหญ่
เครื่องมือปฏิบัติสำหรับการแปลง
สำหรับการแปลงครั้งเดียวที่รวดเร็ว เครื่องมือบนเบราว์เซอร์เป็นตัวเลือกที่เร็วที่สุด วางหรืออัปโหลดข้อมูล เลือกรูปแบบเป้าหมาย และรับผลลัพธ์ทันที
เคล็ดลับ แปลงระหว่างรูปแบบ JSON, YAML และ CSV ทันที: วิธีแปลงรูปแบบข้อมูล วางข้อมูล เลือกรูปแบบเป้าหมาย แล้วคัดลอกหรือดาวน์โหลดผลลัพธ์
สำหรับการทำงานกับ JSON โดยเฉพาะ ตัวจัดรูปแบบที่ตรวจสอบและจัดระเบียบ JSON ของคุณมีค่ามาก:
- JSON Formatter — ตรวจสอบ จัดรูปแบบ และย่อ JSON
- JSON to CSV Converter — แปลง JSON array เป็น CSV
- YAML-JSON Converter — แปลงระหว่าง YAML และ JSON
- CSV Viewer — ดูและสำรวจไฟล์ CSV
แปลงข้อมูลของคุณตอนนี้:
เครื่องมือทั้งหมดฟรีและทำงานในเบราว์เซอร์โดยตรง