CSV เป็น JSON: แปลงตารางแบนให้กลายเป็นโครงสร้างแบบคีย์-ค่า
หน้านี้รับไฟล์ CSV (ค่าที่คั่นด้วยเครื่องหมายจุลภาค อัฒภาค หรือแท็บ) แล้วแปลงเป็น JSON ซึ่งโดยปกติแล้วคืออาร์เรย์ของออบเจกต์ โดยแต่ละแถวกลายเป็นหนึ่งออบเจกต์ และแต่ละคอลัมน์กลายเป็นคีย์ คุณลากไฟล์มาใส่หรือเลือกจากเครื่อง ตั้งค่ารูปแบบเอาต์พุตเป็น JSON เลือกตัวคั่นให้ถูกต้อง (ถ้า CSV ของคุณใช้อย่างอื่นนอกเหนือจากจุลภาค) จากนั้นดูตัวอย่างผลลัพธ์และดาวน์โหลดไฟล์ JSON ที่เสร็จสมบูรณ์
สิ่งที่ทำให้หน้านี้แตกต่างจากเครื่องมือแปลงไฟล์อื่น
1. CSV เก็บทุกอย่างเป็นข้อความ ไม่มีชนิดข้อมูลในตัว
CSV (Comma-Separated Values) เป็นฟอร์แมตที่เก็บเฉพาะข้อความล้วน ราคาสินค้า จำนวนคงเหลือ วันที่ หรือรหัสไปรษณีย์ที่ขึ้นต้นด้วยศูนย์ — ทุกอย่างถูกมองว่าเป็นสตริงทั้งสิ้น เมื่อแปลงเป็น JSON ตัวเลขอย่าง 1,000.50 หรือ 042 จะยังคงเป็นสตริง "1,000.50" และ "042" ในผลลัพธ์ กล่าวคือ ตัวแปลงนี้ไม่พยายามเดาชนิดข้อมูล หน้าที่แปลงสตริงเป็นตัวเลขหรือวันที่หลังจากดาวน์โหลดเป็นของคุณ
2. ไม่มีการสร้างโครงสร้างซ้อนกัน
CSV เป็นตารางแบบแบน (flat table) ดังนั้น JSON ที่ได้จึงเป็นอาร์เรย์แบนของออบเจกต์แบน เสมอ คุณจะไม่ได้ออบเจกต์ที่ซ้อนกันภายในออบเจกต์ (nested objects) ด้วยเครื่องมือนี้โดยตรง หากคุณต้องการ JSON แบบมีลำดับชั้น คุณต้องจัดการเพิ่มเติมหลังการแปลง ซึ่งต่างจากทิศทางตรงกันข้าม (JSON → CSV) ที่จำเป็นต้องทำให้โครงสร้างซ้อนกันแบนลง
3. ตัวคั่น (delimiter) เป็นตัวแปรสำคัญ
CSV อาจใช้จุลภาค อัฒภาค หรือแท็บก็ได้ หน้านี้ให้คุณเลือกตัวคั่นให้ถูกต้อง หากเลือกผิด ข้อมูลทั้งไฟล์จะอ่านไม่ถูกต้อง เช่น ถ้า CSV ใช้เครื่องหมายอัฒภาคแต่คุณเลือกจุลภาค ระบบจะเห็นเครื่องหมายอัฒภาคเป็นส่วนหนึ่งของข้อมูล ทำให้จำนวนคอลัมน์ไม่สม่ำเสมอและเกิดข้อผิดพลาดในการแยกวิเคราะห์
4. เครื่องหมายจุลภาคและขึ้นบรรทัดใหม่ที่ฝังอยู่ในข้อมูลเป็นจุดเปราะบาง
CSV มีกฎการใส่เครื่องหมายคำพูด (quoting) กำกับข้อมูลที่ประกอบด้วยจุลภาคหรือขึ้นบรรทัดใหม่ แต่กฎนี้ไม่ได้ถูกปฏิบัติตามอย่างเคร่งครัดในทุกไฟล์ ตัวอย่างเช่น ถ้าคุณมีฟิลด์ที่ขึ้นต้นด้วย " และลงท้ายด้วย " แต่มีจุลภาคหรือขึ้นบรรทัดใหม่ภายใน ตัวแยกวิเคราะห์บางตัวอาจตีความผิด ทำให้เกิด parsing error ที่พบได้บ่อยกว่าการแปลงระหว่างฟอร์แมตอื่น
อินพุต เอาต์พุต และตัวเลือกของผู้ใช้
- อินพุต: ไฟล์ CSV (หรือ JSON หรือ XLSX ก็ได้ แต่สถานการณ์หลักคือ CSV → JSON) ระบบตรวจจับฟอร์แมตอินพุตอัตโนมัติ
- ตัวเลือกของผู้ใช้: ตั้งค่ารูปแบบเอาต์พุตเป็น JSON และเลือกตัวคั่น (Comma, Semicolon, Tab) ถ้าอินพุตเป็น CSV
- เอาต์พุต: ไฟล์ JSON มีหน้าตัวอย่างผลลัพธ์ แสดงจำนวนแถวและคอลัมน์ของตาราง และขนาดของไฟล์เอาต์พุต
กฎและกรณีขอบ (edge cases)
| สถานการณ์ | ข้อความที่แสดง |
|---|---|
| CSV แยกวิเคราะห์ไม่ได้ (quoting ผิด, จำนวนคอลัมน์ไม่ตรงกัน) | "This CSV could not be parsed." |
| ไฟล์ไม่มีแถวข้อมูล | "This file has no table rows." |
| เกินจำนวนแถวหรือคอลัมน์สูงสุด | "This table has more than ‹max› rows." หรือ "This table has more than ‹max› columns." |
| ไฟล์มีขนาดใหญ่เกินไป | "This file is too large. Use a file under ‹max›." |
| ไม่ได้เลือกไฟล์ | "Choose one file first." |
| เลือกไฟล์ชนิดผิด | "Choose a CSV, JSON or XLSX file." |
| การแปลงใช้เวลานานเกินไป | "This conversion is taking too long. Try a smaller file." |
หมายเหตุ: เครื่องมือนี้แยกวิเคราะห์เฉพาะข้อมูลที่มองเห็นได้จาก CSV ไม่มีการรันสูตรหรือคงรูปแบบ (เพราะ CSV ไม่มีรูปแบบเหล่านั้น) การขึ้นบรรทัดใหม่ภายในฟิลด์ที่ใช้เครื่องหมายคำพูดจะถูกเก็บเป็น \n ในค่าสตริงของ JSON และเลขศูนย์นำหน้าจะถูกคงไว้เพราะทุกฟิลด์ถูกปฏิบัติเป็นสตริง หากคุณนำ JSON ไปใช้ในสภาพแวดล้อมที่แปลงชนิดข้อมูลอัตโนมัติ เช่น JSON.parse() ใน JavaScript ศูนย์นำหน้าอาจหายไป
ใครควรใช้เครื่องมือนี้
- นักพัฒนาที่ได้รับไฟล์ CSV จากฐานข้อมูลหรือสเปรดชีต และต้องป้อนข้อมูลเข้าสู่แอปพลิเคชัน JavaScript หรือ API ที่คาดหวัง JSON
- นักวิเคราะห์ข้อมูลที่ต้องการแปลงไฟล์ที่อยู่แบบ CSV ที่มีรหัสไปรษณีย์ขึ้นต้นด้วยศูนย์ โดยคงเลขศูนย์ไว้
- ทีมงานที่แบ่งปันข้อมูลตารางระหว่างเพื่อนร่วมงานที่ไม่ใช้เทคนิค (ใช้ Excel/CSV) และระบบเทคสแต็กที่อ่าน JSON โดยไม่ต้องอัปโหลดข้อมูลละเอียดอ่อนไปยังเซิร์ฟเวอร์
- นักเรียนหรือนักวิจัยที่ต้องการแปลงตารางข้อมูลครั้งเดียวให้เป็นรูปแบบที่มีโครงสร้างสำหรับการบ้านเขียนโปรแกรม
คำถามที่พบบ่อย (FAQ)
ถาม: ทำไมตัวเลขใน CSV ถึงกลายเป็นสตริงใน JSON?
ตอบ: CSV ไม่มีชนิดข้อมูล ค่าทั้งหมดเป็นข้อความ เครื่องมือนี้แปลงตามสภาพจริง ถ้าคุณต้องการตัวเลข ให้แปลงสตริงเป็นตัวเลขหลังดาวน์โหลดด้วย Number() หรือ parseInt() ในโค้ดของคุณ
ถาม: รหัสไปรษรณีย์ขึ้นต้นด้วยศูนย์ เช่น "042" จะหายไปไหม?
ตอบ: ไม่หาย เพราะทุกฟิลด์ถูกเก็บเป็นสตริง ระบบจะคง "042" ไว้ แต่อย่าลืมว่าถ้าคุณใช้ JSON.parse() ใน JavaScript ที่แปลงสตริงที่ดูเหมือนตัวเลขเป็นตัวเลข ศูนย์นำหน้าจะหายไป
ถาม: ใช้เครื่องหมายจุลภาคในข้อมูลได้หรือไม่?
ตอบ: ได้ ถ้าฟิลด์นั้นถูกครอบด้วยเครื่องหมายคำพูด ("...") แต่ถ้าไม่มีเครื่องหมายคำพูด ตัวแยกวิเคราะห์จะตีความจุลภาคเป็นตัวคั่นคอลัมน์ ทำให้ข้อมูลผิดเพี้ยน
ถาม: ถ้า CSV มีขึ้นบรรทัดใหม่ภายในเซลล์จะเกิดอะไรขึ้น?
ตอบ: ถ้าเซลล์นั้นถูกครอบด้วยเครื่องหมายคำพูด ระบบจะเก็บขึ้นบรรทัดใหม่เป็น \n ในสตริง ถ้าไม่ครอบ การขึ้นบรรทัดใหม่จะถูกตีความเป็นจุดสิ้นสุดของแถว ทำให้ตารางเสีย
ถาม: ข้อมูลของฉันปลอดภัยไหม? ตอบ: การแปลงทั้งหมดทำงานภายในเบราว์เซอร์ของคุณ (client-side) ไม่มีการอัปโหลดข้อมูลไปยังเซิร์ฟเวอร์ใดๆ ดังนั้นข้อมูลที่ละเอียดอ่อนจึงปลอดภัย
ถาม: ทำไมฉันถึงได้ข้อความ "This CSV could not be parsed."? ตอบ: มักเกิดจาก quoting ที่ไม่ถูกต้อง (เช่น เครื่องหมายคำพูดเปิดแต่ไม่ปิด) หรือจำนวนคอลัมน์ระหว่างแถวไม่เท่ากัน ตรวจสอบไฟล์ CSV ต้นทางด้วยโปรแกรมแก้ไขข้อความเพื่อดูปัญหา