9 điểm bởi GN⁺ 2024-12-09 | 2 bình luận | Chia sẻ qua WhatsApp
  • JSON5 là định dạng mở rộng của định dạng tệp JSON, được tạo ra để con người dễ trực tiếp viết và bảo trì hơn
    • Không được dùng cho mục đích giao tiếp giữa các máy
    • Bắt đầu từ năm 2012 và tính đến năm 2022 đã được tải xuống hơn 65 triệu lần mỗi tuần, thuộc nhóm 0,1% gói được phụ thuộc nhiều nhất trên npm
    • Được áp dụng trong các dự án lớn như Chromium, Next.js, Babel, Retool, WebStorm
    • Được hỗ trợ mặc định trên các nền tảng Apple như macOS và iOS
  • Tính năng của JSON5
    • Là tập siêu của JSON, bao gồm một phần cú pháp của ECMAScript 5.1
    • Tệp JSON5 luôn là tệp ES5 hợp lệ
  • Các tính năng ECMAScript 5.1 được mở rộng
    • Đối tượng
      • Khóa đối tượng có thể là IdentifierName của ECMAScript 5.1
      • Cho phép một dấu phẩy cuối duy nhất trong đối tượng
    • Mảng
      • Cho phép một dấu phẩy cuối duy nhất trong mảng
    • Chuỗi
      • Chuỗi có thể được bao bằng dấu nháy đơn
      • Có thể trải dài trên nhiều dòng bằng cách escape ký tự xuống dòng
      • Có thể chứa các ký tự escape
    • Số
      • Có thể biểu diễn ở hệ thập lục phân
      • Có thể có dấu thập phân ở đầu hoặc cuối
      • Có thể bao gồm số dương vô cực, âm vô cực và NaN theo IEEE 754
      • Có thể bắt đầu bằng dấu cộng tường minh
    • Chú thích
      • Cho phép chú thích một dòng và nhiều dòng
    • Khoảng trắng
      • Cho phép thêm các ký tự khoảng trắng khác
  • API
    • JSON5.parse(): Phân tích chuỗi JSON5 để tạo ra giá trị hoặc đối tượng JavaScript
    • JSON5.stringify(): Chuyển giá trị JavaScript thành chuỗi JSON5
  • CLI
    • Cung cấp CLI để chuyển JSON5 sang JSON hoặc kiểm tra cú pháp của tài liệu JSON5
  • Khả năng tương thích ECMAScript
    • JSON5 được thiết kế để tương thích hoàn toàn với ES5, nhưng các ký tự U+2028 và U+2029 không được phép trong ES5
    • Từ ES2019, các ký tự này được cho phép nên JSON và JSON5 hoàn toàn tương thích với ES2019
  • Giấy phép
    • Được cung cấp theo giấy phép MIT.

2 bình luận

 
GN⁺ 2024-12-09
Ý kiến trên Hacker News
  • JSON chỉ hỗ trợ chuỗi dùng dấu ngoặc kép, nhờ đó loại bỏ tranh cãi về việc dùng loại dấu ngoặc nào. Có thể dùng JSONC để thêm chú thích và dấu phẩy cuối
    • JSONC được dùng làm định dạng cấu hình trong Visual Studio Code
  • Cho rằng tên gọi JSON5 là thiếu đạo đức. Nếu không có sự chấp thuận của tác giả gốc thì việc gợi ý như thể đây là phiên bản kế tiếp là không phù hợp
  • Ưa thích JSON5 và cho rằng YAML khó đọc. Thường dùng công cụ chuyển đổi sang JSON để hiểu các tệp YAML
  • JSON được dùng rộng rãi vì nó đơn giản. Cho rằng những lựa chọn thay thế phức tạp như XML hay YML là không phù hợp
    • Dùng định dạng phức tạp có thể gây ra vấn đề
  • Lấy làm tiếc vì EDN không được chấp nhận rộng rãi bên ngoài hệ sinh thái Clojure
    • Dù không có tiêu chuẩn, người dùng vẫn sử dụng mà không gặp vấn đề gì
  • Chỉ ra vấn đề về ký tự đặc biệt trong JSON. JSON được định nghĩa là UTF-8, nhưng có lỗi ghi sai các ký tự điều khiển ASCII 7 bit
    • RFC cần phải bao gồm 33 ký tự điều khiển
  • Khuyến nghị TOML và cho rằng đây là sự kết hợp hoàn hảo giữa khả năng con người đọc được và hỗ trợ công cụ
  • Cho rằng việc hỗ trợ nhiều kiểu dữ liệu hơn trong các lựa chọn thay thế JSON/YAML không phải là ý hay
    • NestedText gần như lý tưởng, nhưng dùng nhiều cú pháp và không đưa chú thích vào mô hình dữ liệu
  • Chỉ ra rằng JSON5 không đưa vào chuỗi escape \U cho các ký tự Unicode ngoài BMP
    • Việc phải dùng cặp thay thế UTF-16 vừa phiền phức vừa không phù hợp với tiêu chuẩn Unicode
  • Cho rằng ngoài chú thích và kiểu datetime native thì JSON không cần thêm tính năng nào khác
    • Dấu phẩy cuối được xem là hữu ích