9 คะแนน โดย GN⁺ 2024-12-09 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • JSON5 เป็นรูปแบบที่ขยายจากไฟล์ JSON เพื่อให้มนุษย์เขียนและดูแลรักษาได้ง่ายขึ้น
    • ไม่ได้ใช้สำหรับการสื่อสารระหว่างเครื่อง
    • เริ่มต้นในปี 2012 และ ณ ปี 2022 มียอดดาวน์โหลดมากกว่า 65 ล้านครั้งต่อสัปดาห์ และอยู่ในกลุ่มแพ็กเกจที่ถูกอ้างอิงมากที่สุด 0.1% บน npm
    • ถูกนำไปใช้ในโปรเจ็กต์หลักอย่าง Chromium, Next.js, Babel, Retool, WebStorm เป็นต้น
    • รองรับโดยค่าเริ่มต้นบนแพลตฟอร์มของ Apple เช่น MacOS และ iOS
  • คุณสมบัติของ JSON5
    • เป็น superset ของ JSON และรวมบางไวยากรณ์ของ ECMAScript 5.1 ไว้ด้วย
    • ไฟล์ JSON5 เป็นไฟล์ ES5 ที่ถูกต้องเสมอ
  • ความสามารถ ECMAScript 5.1 ที่ขยายเพิ่ม
    • อ็อบเจ็กต์
      • คีย์ของอ็อบเจ็กต์สามารถเป็น ECMAScript 5.1 IdentifierName ได้
      • อนุญาตให้มี comma ต่อท้ายได้หนึ่งตัวในอ็อบเจ็กต์
    • อาร์เรย์
      • อนุญาตให้มี comma ต่อท้ายได้หนึ่งตัวในอาร์เรย์
    • สตริง
      • สตริงสามารถครอบด้วย single quote ได้
      • สามารถมีหลายบรรทัดได้โดย escape อักขระขึ้นบรรทัดใหม่
      • สามารถมี character escape ได้
    • ตัวเลข
      • แสดงในรูปแบบเลขฐานสิบหกได้
      • สามารถมีจุดทศนิยมอยู่ด้านหน้าหรือด้านท้ายได้
      • สามารถรวมค่า IEEE 754 positive infinity, negative infinity และ NaN ได้
      • สามารถขึ้นต้นด้วยเครื่องหมายบวกแบบชัดเจนได้
    • คอมเมนต์
      • อนุญาตทั้งคอมเมนต์บรรทัดเดียวและหลายบรรทัด
    • ช่องว่าง
      • อนุญาตอักขระช่องว่างเพิ่มเติม
  • API
    • JSON5.parse(): พาร์สสตริง JSON5 เพื่อสร้างค่า JavaScript หรืออ็อบเจ็กต์
    • JSON5.stringify(): แปลงค่า JavaScript เป็นสตริง JSON5
  • CLI
    • มี CLI สำหรับแปลง JSON5 เป็น JSON หรือตรวจสอบไวยากรณ์ของเอกสาร JSON5
  • ความเข้ากันได้กับ ECMAScript
    • JSON5 ถูกออกแบบมาให้เข้ากันได้กับ ES5 อย่างสมบูรณ์ แต่ตัวอักษร U+2028 และ U+2029 ไม่ได้รับอนุญาตใน ES5
    • ใน ES2019 อักขระเหล่านี้ได้รับอนุญาต ทำให้ JSON และ JSON5 เข้ากันได้กับ ES2019 อย่างสมบูรณ์
  • สัญญาอนุญาต
    • เผยแพร่ภายใต้สัญญาอนุญาต MIT

2 ความคิดเห็น

 
GN⁺ 2024-12-09
ความเห็นจาก Hacker News
  • JSON รองรับเฉพาะสตริงที่ใช้เครื่องหมายอัญประกาศคู่ จึงช่วยตัดประเด็นถกเถียงเรื่องการใช้เครื่องหมายอัญประกาศออกไปได้ และสามารถใช้ JSONC เพื่อเพิ่มคอมเมนต์กับเครื่องหมายจุลภาคต่อท้ายได้
    • JSONC ถูกใช้เป็นรูปแบบการตั้งค่าใน Visual Studio Code
  • มองว่าชื่อ JSON5 ไม่เหมาะสมในเชิงจริยธรรม การทำให้เหมือนเป็นเวอร์ชันถัดไปทั้งที่ไม่ได้รับการยินยอมจากผู้สร้างต้นฉบับถือว่าไม่เหมาะสม
  • ชอบ JSON5 และมองว่า YAML อ่านยาก มักใช้เครื่องมือแปลงเป็น JSON เพื่อทำความเข้าใจไฟล์ YAML
  • JSON ถูกใช้อย่างแพร่หลายเพราะเรียบง่าย และมองว่าทางเลือกที่ซับซ้อนอย่าง XML หรือ YML ไม่เหมาะสม
    • การใช้รูปแบบที่ซับซ้อนอาจก่อให้เกิดปัญหาได้
  • น่าเสียดายที่ EDN ไม่ได้รับการยอมรับอย่างกว้างขวางนอกระบบนิเวศ Clojure
    • แม้จะไม่มีมาตรฐาน แต่ผู้ใช้ก็ยังใช้งานได้โดยไม่มีปัญหา
  • ชี้ให้เห็นปัญหาเรื่องอักขระพิเศษของ JSON โดยแม้ JSON จะถูกกำหนดให้เป็น UTF-8 แต่มีข้อผิดพลาดที่ระบุอักขระควบคุม ASCII 7 บิตไม่ถูกต้อง
    • ใน RFC ควรรวมอักขระควบคุม 33 ตัว
  • แนะนำ TOML และมองว่าเป็นการผสมผสานที่ลงตัวระหว่างความอ่านง่ายสำหรับมนุษย์กับการรองรับของเครื่องมือ
  • มองว่าการรองรับชนิดข้อมูลเพิ่มเติมในทางเลือกแทน JSON/YAML ไม่ใช่ความคิดที่ดี
    • NestedText เกือบจะสมบูรณ์แบบ แต่ใช้หลายไวยากรณ์และไม่รวมคอมเมนต์ไว้ในโมเดลข้อมูล
  • ชี้ว่า JSON5 ไม่ได้เพิ่มลำดับ escape แบบ \U สำหรับอักขระยูนิโค้ดนอก BMP
    • การต้องใช้คู่ตัวแทน UTF-16 นั้นยุ่งยากและไม่สอดคล้องกับมาตรฐานยูนิโค้ด
  • มองว่าใน JSON ไม่จำเป็นต้องมีฟีเจอร์อื่นนอกจากคอมเมนต์และชนิด datetime แบบเนทีฟ
    • มองว่าเครื่องหมายจุลภาคต่อท้ายมีประโยชน์