ข้อมูล

CSV, JSON และ YAML

สามรูปแบบนี้พกข้อมูลที่มีโครงสร้างส่วนใหญ่ของโลก การแปลงระหว่างกันทำได้ง่าย แต่การแปลงโดยไม่ทำให้บางอย่างเสียหายแบบเงียบ ๆ ต้องระมัดระวังเล็กน้อย

เผยแพร่:

แต่ละแบบใช้ทำอะไร

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

กับดักการแปลงชนิดข้อมูล

นี่คือสิ่งที่ทำให้คนเสียเงินจริง ๆ CSV มีแต่ข้อความ ไม่มีวิธีระบุว่าค่าเป็นตัวเลข วันที่ หรือสตริง ตัวแปลงจึงเดา และการเดามักผิด

  • รหัสไปรษณีย์อย่าง 01234 กลายเป็นตัวเลข 1234 และเลขศูนย์นำหน้าหายไป
  • รหัสสินค้าอย่าง 1-2 กลายเป็นวันที่
  • เลขบัญชียาว ๆ กลายเป็นเลขทศนิยมลอยตัวและเสียหลักสุดท้าย
  • NA ที่หมายถึงอเมริกาเหนือ กลายเป็น "ไม่มีข้อมูล"

ทุกกรณีเหล่านี้เกิดขึ้นเงียบ ๆ จึงเป็นเหตุผลที่การแปลง CSV เป็น JSON อย่างระมัดระวังควรปล่อยทุกค่าเป็นสตริงแล้วให้คุณตัดสินใจ ซึ่งตัวแปลงของเว็บไซต์นี้ทำโดยตั้งใจ แม้ตอนแรกจะดูจุกจิก

สิ่งที่ไม่รอดเมื่อแปลงเป็น CSV

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

ด้านที่แหลมคมของ YAML

YAML อ่านสบายและพลาดง่ายผิดปกติ

  • การเยื้องคือโครงสร้าง และไม่อนุญาตให้ใช้แท็บ ช่องว่างที่วางผิดที่เปลี่ยนความหมายแทนที่จะเกิดข้อผิดพลาด
  • คำเปล่าบางคำเป็นบูลีน ใน YAML รุ่นเก่า y, n, on, off, yes และ no ถูกวิเคราะห์เป็นจริงหรือเท็จทั้งหมด คอลัมน์ประเทศที่มี NO สำหรับนอร์เวย์จึงกลายเป็น false ให้ใส่เครื่องหมายคำพูด
  • คอมเมนต์หายไป เมื่อแปลงเป็น JSON เพราะ JSON ไม่มีวิธีแสดงคอมเมนต์

ไม่รับประกันการไปกลับ

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

หากต้องการแปลงระหว่างกัน: แปลง CSV เป็น JSON แปลง JSON เป็น CSV หรือแปลง JSON เป็น YAML และตรวจผลลัพธ์ เพราะการไปกลับไม่ตรงทุกประการเสมอไป