การทำงานกับข้อความ JSON มักลงเอยที่สามงานที่ต่างกัน: ทำให้อ่านง่าย ทำให้กระชับ หรือตรวจสอบว่าถูกต้องหรือไม่ นี่คือสามการทำงานที่แยกจากกัน แม้ว่ามักจะถูกรวมไว้ในเครื่องมือเดียวกัน
การจัดรูปแบบ (pretty-print)
การจัดรูปแบบเพิ่มการเยื้อง การขึ้นบรรทัดใหม่ และช่องว่างรอบเครื่องหมายวรรคตอน เพื่อให้โครงสร้างของ JSON อ่านง่ายด้วยตา นี่เป็นการเปลี่ยนแปลงเชิงความสวยงามล้วน ๆ — ไม่ส่งผลต่อข้อมูล มีผลแค่การแสดงผลเท่านั้น
การย่อขนาด (minify)
การย่อขนาดลบช่องว่าง การขึ้นบรรทัดใหม่ และการเยื้องที่ไม่จำเป็นทั้งหมด เหลือไว้เฉพาะอักขระที่จำเป็นจริง ๆ ซึ่งช่วยลดขนาดไฟล์ สิ่งนี้สำคัญเมื่อส่งข้อมูลผ่านเครือข่ายหรือจัดเก็บข้อมูลปริมาณมาก — โครงสร้างข้อมูลเองไม่เปลี่ยนแปลง
การตรวจสอบความถูกต้อง
การตรวจสอบความถูกต้องจะเช็กว่าข้อความเป็น JSON ที่ถูกต้องตามไวยากรณ์หรือไม่ ข้อผิดพลาดทั่วไปที่ตรวจพบ: จุลภาคเกินก่อนวงเล็บปิด เครื่องหมายคำพูดเดี่ยวแทนที่คู่ คีย์ของอ็อบเจกต์ที่ไม่มีเครื่องหมายคำพูด คอมเมนต์ (ซึ่งมาตรฐาน JSON ไม่อนุญาตเลย) หรือวงเล็บที่ไม่ได้ปิด JSON ที่ถูกต้องเป็นเงื่อนไขที่จำเป็นสำหรับให้การจัดรูปแบบหรือการย่อขนาดทำงานได้
เมื่อไหร่ต้องใช้อะไร
- การจัดรูปแบบ — เมื่อดีบักการตอบกลับ API หรือแก้ไขไฟล์การตั้งค่าด้วยตนเอง
- การย่อขนาด — ก่อนส่งข้อมูลผ่านเครือข่ายหรือฝังลงในโค้ดที่ใช้งานจริง
- การตรวจสอบความถูกต้อง — เมื่อวินิจฉัยว่าทำไม parser ถึงปฏิเสธที่จะอ่านไฟล์ JSON
ทำไมข้อความไทยสั้น ๆ ถึงกลายเป็น \u ยาวเป็นพรืด
ตัวอักษรไทยหนึ่งพยางค์มักประกอบด้วยพยัญชนะ สระ และวรรณยุกต์ที่เป็นคนละ Unicode code point ซ้อนกันอยู่ เช่นคำว่า "น้ำ" จริง ๆ แล้วประกอบด้วยตัวอักษรและเครื่องหมายไม้เอกซ้อนกันหลายจุดรหัส เมื่อซีเรียลไลเซอร์ที่ escape ทุกอักขระนอก ASCII (เช่น json.dumps() ใน Python ที่ไม่ได้ตั้ง ensure_ascii=False) แปลงคำสั้น ๆ นี้ ผลลัพธ์จะกลายเป็นลำดับ \uXXXX ที่ยาวกว่าที่คิด เพราะแต่ละจุดรหัสถูก escape แยกกัน JSON ยังคงถูกต้องทั้งก่อนและหลัง แต่แทบอ่านไม่ออกเมื่อดีบัก log หรือ API response ที่มีข้อความภาษาไทย
JSON5 และ JSONC ไม่ใช่ JSON แบบเดียวกัน
บางสภาพแวดล้อม (เช่น ไฟล์การตั้งค่าของ VS Code หรือ TypeScript) ยอมรับจุลภาคท้ายรายการ คอมเมนต์ และคีย์ที่ไม่มีเครื่องหมายคำพูด — นี่คือส่วนขยาย JSON5 หรือ JSONC ไม่ใช่ JSON มาตรฐาน (RFC 8259) ตัวตรวจสอบที่ตั้งค่าให้ตรวจ JSON แบบเข้มงวดจะปฏิเสธไฟล์เช่นนี้อย่างถูกต้อง แม้ตัวแก้ไขจะ "เข้าใจ" มันก็ตาม