ตรวจ JSON/YAML ให้ตรงชนิดข้อมูล ด้วยตัวอย่างที่ทำตามได้
ลองจัด JSON แปลง YAML และ CSV โดยรักษารหัสที่มีศูนย์นำหน้า พร้อมตรวจผลก่อนนำไปใช้จริง

เมื่อไฟล์ config ใช้งานไม่ได้ การแปลงไปมาหลายรูปแบบอาจทำให้หาต้นเหตุยากขึ้น วิธีที่ตรวจสอบได้ง่ายกว่าคือย่อข้อมูลให้เหลือกรณีเล็ก ตรวจไวยากรณ์ แล้วเทียบชนิดข้อมูลก่อนนำกลับไปใช้ ตัวอย่างนี้ใช้ข้อมูลสินค้าสมมติ ไม่มีข้อมูลลูกค้าจริง
1. จัด JSON ก่อนเริ่มแก้
เปิด JSON Formatter วางข้อมูลต่อไปนี้ เลือกเว้นสองช่อง แล้วกด Format:
{"code":"0012","price":125,"active":true,"tags":["desk","sale"]}
หลังจัดรูปแบบ code ต้องยังเป็นข้อความ "0012" ส่วน price เป็นตัวเลข 125, active เป็น boolean true และ tags เป็น array ที่มีสองข้อความ การจัดรูปแบบเปลี่ยนช่องว่าง ไม่ใช่ความหมายของข้อมูล
ลองเปลี่ยนเป็น {"price":125,} จะพบข้อผิดพลาด เพราะ JSON มาตรฐานไม่รับ comma หลังสมาชิกตัวสุดท้าย ให้ลบ comma แล้วลองอีกครั้ง ข้อความผิดพลาดขึ้นกับ parser ของเบราว์เซอร์ เครื่องมือนี้ไม่ได้ไฮไลต์เลขบรรทัดที่ผิดโดยตรง
ก่อนใช้ข้อมูลจาก API จริง ให้ตัด token ชื่อลูกค้า และข้อมูลลับออก ตัวอย่างที่สร้างขึ้นเองมักเพียงพอสำหรับจำลองปัญหาไวยากรณ์
2. แปลง YAML โดยรักษารหัสสินค้า
เปิด YAML Converter แล้วใช้ข้อมูลนี้:
code: "0012"
price: 125
active: true
tags:
- desk
- sale
กด YAML → JSON ผลที่ควรได้คือฟิลด์และชนิดข้อมูลเดียวกับตัวอย่างแรก การครอบ 0012 ด้วย quote บอกชัดว่าค่านี้เป็นรหัส ไม่ใช่จำนวนสินค้า จึงควรเก็บศูนย์นำหน้าไว้
เมื่อแปลงกลับ YAML รูปแบบการเว้นวรรคหรือ quote อาจเปลี่ยนได้ และ JSON ไม่เก็บ comment ของ YAML จึงไม่ควรใช้การแปลงกลับไปมาเพื่อสำรองไฟล์ config ที่ต้องรักษาหมายเหตุและรูปแบบเดิมทุกจุด
3. แยกเรื่อง quote ใน CSV ออกจากการแปลงตัวเลข
เปิด CSV to JSON ปิดการอนุมานชนิดข้อมูล แล้ววาง:
code,note
0012,"hello, world"
ควรได้ object หนึ่งรายการ โดย code เป็นข้อความ "0012" และ note เป็น "hello, world" comma ใน quote เป็นส่วนหนึ่งของข้อความ ไม่ใช่คอลัมน์ที่สาม เมื่อปิดการอนุมาน ค่าใน CSV จะคงเป็น string
หากแอปปลายทางต้องการ number หรือ boolean จึงค่อยเปิดการอนุมาน แล้วตรวจรหัส ตัวเลขยาว และช่องว่างที่มีความหมายอีกครั้ง อย่าตัดสินจากหน้าตาตัวเลขอย่างเดียวว่าควรเปลี่ยนชนิดข้อมูล
4. เทียบก่อนแทนข้อมูลจริง
ใช้ Text Diff เทียบตัวอย่างก่อนและหลัง การเว้นวรรคต่างกันทำให้ข้อความต่างแม้ข้อมูลเหมือนกัน จึงควรตรวจแยกทั้งไวยากรณ์ ชื่อฟิลด์ ค่า และชนิดข้อมูล JSON ที่อ่านได้สำเร็จยังอาจขาดฟิลด์ที่แอปต้องการหรือผิด schema ของระบบ
เก็บไฟล์ต้นฉบับ ทดลองข้อมูลเล็กกับแอปที่อ่านไฟล์ และค่อยแทน config จริงหลังตรวจผ่าน เครื่องมือในเบราว์เซอร์อ่านค่าทั้งก้อนในหน่วยความจำ ไฟล์ใหญ่มากอาจทำให้แท็บค้าง และจำนวนเต็มที่ใหญ่เกินช่วงปลอดภัยของ JavaScript อาจเสียความแม่นยำ ควรเก็บรหัสที่ต้องตรงทุกหลักเป็นข้อความ