ข้ามไปยังเนื้อหา
LeedyBox
สนับสนุน

การแปลงระหว่าง JSON, CSV และ YAML

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

แต่ละรูปแบบเหมาะกับงานใด

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

CSV คือตาราง หนึ่งแถวต่อหนึ่งบรรทัด หนึ่งค่าต่อหนึ่งคอลัมน์ สเปรดชีต ฐานข้อมูล และเครื่องมือทำรายงานนำเข้าได้ง่าย และมีขนาดกะทัดรัดสำหรับชุดข้อมูลขนาดใหญ่ที่ไม่ซ้อนกัน แต่ไม่มีวิธีมาตรฐานในการระบุชนิดข้อมูลหรือโครงสร้างที่ซ้อนกัน

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

คุณสมบัติJSONCSVYAML
ออบเจ็กต์และอาร์เรย์ซ้อนกันได้ไม่ได้ (ตารางแบน)ได้
ชนิดข้อมูลสตริง ตัวเลข บูลีน nullข้อความเท่านั้นอนุมานจากค่า
คอมเมนต์ไม่ได้ไม่ได้ได้
การใช้งานทั่วไปAPI ข้อมูลของแอปสเปรดชีต การนำเข้าไฟล์การตั้งค่า

ข้อมูลซ้อนจะถูกแผ่ออกใน CSV

ไฟล์ CSV มีเพียงแถวและคอลัมน์ ข้อมูลที่ซ้อนกันจึงต้องถูกปรับรูปร่าง วิธีที่ใช้บ่อยมีสองแบบ แบบแรกแผ่โครงสร้างออกเป็นชื่อคอลัมน์ เช่น address.city และ address.zip แบบที่สองเก็บส่วนที่ซ้อนไว้เป็นสตริง JSON ในเซลล์เดียว เครื่องมือแปลงข้อมูลของ LeedyBox มีตัวเลือกทั้งสองแบบ

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

ชนิดข้อมูลกลายเป็นข้อความใน CSV

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

แอปสเปรดชีตก็เดาในแบบของตนเอง เช่น อาจตัดเลขศูนย์นำหน้าของรหัสไปรษณีย์หรือหมายเลขโทรศัพท์ เปลี่ยนตัวเลขยาวเป็นสัญกรณ์วิทยาศาสตร์ หรือตีความค่าเป็นวันที่ เซลล์ที่ขึ้นต้นด้วย =, +, - หรือ @ อาจถูกถือเป็นสูตร ตัวแปลงจึงมีตัวเลือกป้องกันสูตร Excel สำหรับผลลัพธ์ CSV

คอมเมนต์และการกำหนดชนิดใน YAML

JSON ไม่มีคอมเมนต์ การแปลง YAML เป็น JSON จึงทำให้คอมเมนต์หายไป และการแปลงกลับก็ไม่ได้คืนคอมเมนต์มา หากคอมเมนต์มีความสำคัญ ให้เก็บไฟล์ YAML ต้นฉบับไว้

YAML เดาชนิดข้อมูลจากค่าที่ไม่ได้ใส่เครื่องหมายคำพูด ตามกฎ YAML 1.1 แบบเก่าที่ตัวแยกวิเคราะห์บางตัวใช้ คำอย่าง no, yes, on และ off จะกลายเป็นบูลีน รหัสประเทศอย่าง NO จึงอาจกลายเป็น false ค่าอย่าง 2026-10-02 อาจกลายเป็นออบเจ็กต์วันที่ และ 1e3 หรือ 010 อาจถูกอ่านเป็นตัวเลข ตัวแปลงของ LeedyBox อ่าน YAML ด้วย core schema ของ YAML 1.2 ซึ่งเก็บ no และวันที่เป็นข้อความ แต่เครื่องมืออื่นที่อ่านไฟล์ของคุณอาจทำงานต่างออกไป การใส่เครื่องหมายคำพูดให้ค่าที่ต้องเป็นข้อความจึงเป็นนิสัยที่ปลอดภัยที่สุด

ตัวเลขขนาดใหญ่ใน JavaScript

JavaScript เก็บตัวเลขเป็นค่าทศนิยมลอยตัว 64 บิต จำนวนเต็มที่มากกว่า 9,007,199,254,740,991 (253 − 1) ไม่สามารถแทนค่าได้อย่างแม่นยำทุกค่า ID ขนาดใหญ่อย่าง 12345678901234567891 จึงอาจถูกปัดเศษโดยไม่มีการแจ้งเตือนเมื่อแยกวิเคราะห์ เรื่องนี้ส่งผลต่อตัวแปลงบนเบราว์เซอร์ทุกตัว รวมถึงตัวนี้ ซึ่งจะแสดงข้อความแจ้งเมื่อพบตัวเลขลักษณะนี้ ID ของฐานข้อมูลและตัวระบุที่ยาวอื่น ๆ จึงควรเก็บเป็นสตริง

การตรวจสอบผลลัพธ์

การแปลงที่ได้ผลลัพธ์ที่ถูกไวยากรณ์ไม่ได้หมายความว่าถูกต้องเสมอไป ก่อนนำผลลัพธ์ไปใช้

  • เปรียบเทียบจำนวนแถวหรือรายการกับต้นฉบับ
  • สุ่มตรวจบางระเบียน รวมถึงระเบียนที่มีค่าว่าง อักขระพิเศษ การขึ้นบรรทัดใหม่ หรือข้อมูลซ้อน
  • ตรวจคอลัมน์ที่ควรเป็นตัวเลข บูลีน หรือวันที่ในระบบปลายทาง
  • มองหาตัวเลขยาวที่อาจถูกปัดเศษ
  • ตรวจสอบผลลัพธ์ด้วยโปรแกรมที่จะอ่านจริง โดยใช้สำเนาข้อมูลก่อน

เครื่องมือเปรียบเทียบข้อความช่วยเปรียบเทียบไฟล์ต้นฉบับกับผลที่แปลงไปแล้วแปลงกลับได้

คำถามที่พบบ่อย

แปลง JSON เป็น CSV แล้วแปลงกลับโดยไม่มีอะไรเปลี่ยนได้หรือไม่

ได้เฉพาะกับข้อมูลที่เรียบง่ายและไม่ซ้อนกัน และแม้แต่ในกรณีนั้น ตัวเลขและบูลีนมักกลับมาเป็นข้อความ ข้อมูลซ้อนและชนิดข้อมูลขึ้นอยู่กับตัวเลือกที่ใช้ จึงควรเปรียบเทียบผลลัพธ์กับต้นฉบับ

ทำไมค่าใน YAML ของฉันจึงกลายเป็น true หรือ false

ตัวแยกวิเคราะห์ YAML บางตัวถือคำที่ไม่ได้ใส่เครื่องหมายคำพูด เช่น yes, no, on และ off เป็นบูลีน ให้ใส่ค่าไว้ในเครื่องหมายคำพูดเพื่อคงไว้เป็นข้อความ

ข้อมูลของฉันถูกอัปโหลดเมื่อแปลงหรือไม่

เครื่องมือแปลงข้อมูลของ LeedyBox ทำงานในเบราว์เซอร์ของคุณ ข้อมูลที่คุณวางจึงประมวลผลบนอุปกรณ์ของคุณ