ในโลกของการพัฒนาซอฟต์แวร์ มีเพียงไม่กี่หัวข้อที่สามารถสร้างการอภิปรายอย่างเร่าร้อนได้เท่ากับรูปแบบข้อมูล บล็อกโพสต์ล่าสุดโดย Ron Gilbert นักพัฒนาวิดีโอเกมรุ่นเบอร์รันตัน ผู้สร้างเกม Maniac Mansion และ Monkey Island ได้จุดประกายการถกเถียงใหม่เกี่ยวกับเครื่องมือที่นักพัฒนาใช้ในแต่ละวัน ขณะที่ Gilbert ได้แบ่งปันประสบการณ์ส่วนตัวของเขากับ Git, JSON และ Markdown แต่ชุมชนนักพัฒนากลับให้ความสนใจกับประเด็นข้อโต้แย้งหนึ่งเป็นพิเศษ นั่นคือ ข้อจำกัดของ JSON เมื่อเทียบกับรุ่นพี่อย่าง XML
การฟื้นคืนชีพของ JSON พบกับความอาลัยต่อ XML
การอภิปรายเผยให้เห็นถึงการเปลี่ยนแปลงในความรู้สึกของนักพัฒนาอย่างน่าสนใจ นักพัฒนามืออาชีพจำนวนมากกำลังหันมามอง XML ใหม่ด้วยความชื่นชม พวกเขาตระหนักถึงคุณสมบัติต่างๆ ที่ครั้งหนึ่งเคยถูกมองข้ามไป ความเรียบง่ายของ JSON ทำให้มันได้รับความนิยมอย่างกว้างขวาง แต่ความเรียบง่ายแบบเดียวกันนี้ กำลังแสดงให้เห็นถึงข้อจำกัดในแอปพลิเคชันที่ซับซ้อน
JSON เป็นหนึ่งในโศกนาฏกรรมที่เป็นสัญลักษณ์ที่เกิดขึ้นในการพัฒนาซอฟต์แวร์ มันไม่ใช่ว่า JSON นั้นแย่ในตัวของมันเอง แต่มันชัดเจนว่าถูกออกแบบมาให้เครื่องจักรเป็นผู้เขียน ไม่ใช่สำหรับมนุษย์
ฉันทามติของชุมชนชี้ให้เห็นว่าจุดประสงค์ดั้งเดิมของ JSON ในฐานะรูปแบบที่เครื่องจักรอ่านได้ ถูกยืดออกไปเกินกว่ากรณีการใช้งานที่ตั้งใจไว้ นักพัฒนาในปัจจุบันใช้ JSON สำหรับทุกอย่าง ตั้งแต่ไฟล์กำหนดค่าต่างๆ ไปจนถึงโครงร่างข้อมูลที่ซับซ้อน ซึ่งเผยให้เห็นข้อจำกัดของมันสำหรับเนื้อหาที่มนุษย์เป็นผู้เขียน
คุณสมบัติที่ขาดหายไป: มากกว่าแค่ความคิดเห็น
ในขณะที่การขาดความคิดเห็น (comments) ใน JSON มักถูกกล่าวถึงบ่อยครั้ง การอภิปรายในชุมชนได้เผยให้เห็นถึงความกังวลในระดับที่ลึกกว่ามาก นักพัฒนาชี้ให้เห็นถึงความไม่สามารถของ JSON ในการจัดการข้อมูลเมตา (metadata) การขาดเครื่องมือการตรวจสอบความถูกต้องที่เป็นมาตรฐานเทียบเท่ากับ XML Schema และความท้าทายในการแสดงความสัมพันธ์ของข้อมูลที่ซับซ้อน
บทสนทนาเน้นย้ำให้เห็นว่า JSON กำลังค้นพบ XML Schema, XML DTDs ฯลฯ ใหม่ ในเมื่อเรามีสิ่งเหล่านั้นมาแล้วเมื่อกว่าสี่分之一ศตวรรษก่อน แนวคิดนี้สะท้อนไปทั่วทั้งความคิดเห็น โดยมีนักพัฒนาหลายคนระบุว่าเครื่องมือและมาตรฐานของ XML นั้นมีความ成熟มากกว่าสิ่งที่มีให้สำหรับ JSON ในปัจจุบัน
ฟีเจอร์ของ XML ที่นักพัฒนาพลาดไปใน JSON:
- การรองรับคอมเมนต์ในตัว
- การตรวจสอบความถูกต้องของสคีมา (XML Schema, DTD)
- ความสามารถในการแปลงข้อมูล (XSLT)
- เมทาดาทาผ่านแอตทริบิวต์
- เครื่องมือและไลบรารีสำหรับการแยกวิเคราะห์ที่เป็นมาตรฐาน
- การรองรับการแสดงผลในเบราว์เซอร์ด้วยสไตล์ชีต
ปัญหาการกำหนดค่า
หนึ่งในประเด็นการอภิปรายที่ร้อนแรงที่สุดเกี่ยวข้องกับการใช้ JSON สำหรับไฟล์กำหนดค่า (configuration files) นักพัฒนาได้แบ่งปันวิธีการแก้ไขปัญหาแบบสร้างสรรค์สำหรับข้อจำกัดของ JSON รวมถึงการเพิ่มฟิลด์ความคิดเห็นพิเศษเพื่อเก็บข้อความอธิบาย สิ่งนี้เน้นย้ำถึงความไม่ตรงกันระหว่างการออกแบบของ JSON กับรูปแบบการใช้งานทั่วไป
ชุมชนยังได้อภิปรายถึงทางเลือกอื่นๆ เช่น YAML และ TOML โดยมีปฏิกิริยาที่หลากหลาย ในขณะที่บางคนชอบความอ่านง่ายของ YAML คนอื่นๆ กลับชี้ให้เห็นถึงความซับซ้อนในการแยกวิเคราะห์และปัญหาด้านความปลอดภัยของมันเอง การค้นหารูปแบบการกำหนดค่าที่สมบูรณ์แบบยังคงดำเนินต่อไป โดยไม่มีผู้ชนะที่ชัดเจนจากการอภิปราย
รูปแบบทางเลือกที่ถูกกล่าวถึง:
- YAML: รูปแบบที่มนุษย์อ่านได้ง่ายและเป็น superset ของ JSON แต่มีความซับซ้อนในการแยกวิเคราะห์
- TOML: มุ่งเน้นไปที่ไฟล์การกำหนดค่าโดยมีความสามารถในการอ่านที่ดีกว่า
- JSON5: ส่วนขยายของ JSON ที่รองรับคอมเมนต์และเครื่องหมายจุลภาคต่อท้าย
- XML: มาตรฐานที่มีความเป็นผู้ใหญ่พร้อมเครื่องมือที่หลากหลาย
ช่องว่างของเครื่องมือ
ผู้แสดงความคิดเห็นหลายคนชี้ให้เห็นถึงช่องว่างที่สำคัญระหว่างเครื่องมือของ JSON และ XML คุณสมบัติต่างๆ เช่น XSLT สำหรับการแปลงข้อมูล (transformations) การสนับสนุนในเบราว์เซอร์แบบในตัวสำหรับการแสดงผล XML ด้วยสไตล์ชีต และระบบการตรวจสอบความถูกต้องที่成熟 ถูกเน้นย้ำว่าเป็นจุดแข็งของ XML ที่ JSON ยังขาดอยู่
นักพัฒนาคนหนึ่งได้แบ่งปันว่า: ฉันจำได้เมื่อเว็บเพจของ Blizzard เป็นแค่ XML+XSLT ฉันกำลังสร้างตัวแยกวิเคราะห์บางอย่างสำหรับพวกเขาและรู้สึกสับสนไปชั่วครู่เมื่อสคริปต์ Python ของฉันส่งคืน XML เปล่าๆ กลับมาเมื่อดึงข้อมูลหน้าแรก ตัวอย่างนี้แสดงให้เห็นว่าแนวทางแบบบูรณาการของ XML ต่อข้อมูลและการนำเสนอ ได้จัดหาวิธีแก้ไขปัญหาที่ระบบที่ใช้ JSON ยังคงต้องทำงานเพื่อทำซ้ำ
ปัจจัยด้านมนุษย์
เหนือไปจากข้อกำหนดทางเทคนิค การอภิปรายมักจะวนกลับมาที่ปัจจัยด้านมนุษย์ในการออกแบบรูปแบบข้อมูล ข้อกำหนดที่เข้มงวดของ JSON เกี่ยวกับเครื่องหมายจุลภาคตอนท้าย (trailing commas) และคีย์ที่ต้องมีเครื่องหมายคำพูด (quoted keys) ถูกถกเถียงกันอย่างกว้างขวาง โดยนักพัฒนาได้แบ่งปันทั้งความหงุดหงิดและเหตุผลที่มาของการออกแบบเหล่านี้
บทสนทนาเผยให้เห็นว่านักพัฒนาจำนวนมากได้เขียนโปรแกรมแยกวิเคราะห์ JSON ที่ปรับแต่งเองเพื่อผ่อนคลายข้อจำกัดเหล่านี้ เพียงเพื่อจะพบกับปัญหาความเข้ากันได้กับเครื่องมือมาตรฐาน ความตึงเครียดระหว่างความสะดวกสบายและการทำให้เป็นมาตรฐานนี้ยังคงไม่ได้รับการแก้ไขในชุมชน
วิธีแก้ปัญหาทั่วไปของนักพัฒนาสำหรับข้อจำกัดของ JSON:
- การเพิ่มฟิลด์ "comment":
{"_comment": "This is a comment", "data": "value"}
- การใช้ JSON5 หรือ JSONC สำหรับไฟล์การกำหนดค่า
- ตัวแยกวิเคราะห์ JSON แบบกำหนดเองที่อนุญาตให้มีเครื่องหมายจุลภาคต่อท้ายและคีย์ที่ไม่มีเครื่องหมายคำพูด
- การตรวจสอบสคีมาภายนอกด้วย JSON Schema
มองไปข้างหน้า
การอภิปรายชี้ให้เห็นว่ารูปแบบข้อมูลในอุดมคตินั้นอาจยังไม่มีอยู่จริง ในขณะที่ JSON ทำได้ดีเยี่ยมในการแลกเปลี่ยนข้อมูลอย่างง่ายระหว่างเครื่องจักร และ XML จัดเตรียมคุณสมบัติอันทรงพลังสำหรับการประมวลผลเอกสารที่ซับซ้อน แต่ทั้งคู่ก็ไม่ได้ตอบโจทย์ความต้องการที่หลากหลายของการพัฒนาสมัยใหม่ได้อย่างสมบูรณ์แบบ
การไตร่ตรองของชุมชนเกี่ยวกับเครื่องมือเหล่านี้แสดงให้เห็นถึงความ成熟ในการคิดของนักพัฒนา แทนที่จะเพียงแค่ไล่ตามเทคโนโลยีใหม่ล่าสุด นักพัฒนาที่มีประสบการณ์กำลังใช้แนวทางที่ละเอียดอ่อนมากขึ้น โดยประเมินเครื่องมือตามจุดแข็งและข้อจำกัดเฉพาะสำหรับกรณีการใช้งานแต่ละอย่าง
วิวัฒนาการอย่างต่อเนื่องของรูปแบบข้อมูลสะท้อนให้เห็นถึงวิวัฒนาการโดยรวมของการพัฒนาซอฟต์แวร์เอง ซึ่งเป็นการทรงตัวระหว่างความเรียบง่ายและพลัง ระหว่างการอ่านเข้าใจของมนุษย์และประสิทธิภาพของเครื่องจักร ระหว่างผลผลิตทันทีและการบำรุงรักษาในระยะยาว
ดังที่ผู้แสดงความคิดเห็นคนหนึ่งระบุเกี่ยวกับการค้นหาเครื่องมือที่ดีกว่าอย่างต่อเนื่อง: มันทำให้ฉันนึกถึงเรื่อง NoSQL จากสมัยนั้นเช่นกัน มันถูกทำให้ง่ายเกินไปว่า 'จะเป็นอย่างไรถ้าเราโยนก้อน JSON ลงในที่เก็บคีย์/ค่า?' ใช้เวลาหลายปีกว่าจะตระหนักว่าฐานข้อมูลเชิงสัมพันธ์และ SQL นั้นไม่ได้แย่ขนาดนั้น รูปแบบของการค้นพบวิธีแก้ไขปัญหาที่มีอยู่แล้วนี้ ดูเหมือนจะเกิดขึ้นซ้ำแล้วซ้ำอีกกับรูปแบบข้อมูล
อ้างอิง: Git, JSON and Markdown walk into bar